theschmitzer
theschmitzer

Reputation: 12860

Bash alias of an svn command piped to awk

I type in this command frequently, and was trying to alias it, and couldn't for some reason.

for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done

This obviously does a large number of svn reverts.

when I alias it:

alias revert_all="for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done"

svn stat runs immediately - no good

Then I try double-quoting the awk portion:

alias revert_all='for FILE in `svn stat | awk "{print $2}"`; do svn revert $FILE; done'

but this does not run properly - the awk portion does not execute (I get the M values showing up and try to run svn revert M).

next try, with escaped single tick quotes:

alias revert_all='for FILE in `svn stat | awk \'{print $2}\'`; do svn revert $FILE; done'

The command does not complete, bash is waiting for another tick?

I know I could script this, or put the awk command in the file, but I'm not looking for a workaround. There is something here I don't know. What is it?

TIA

Upvotes: 2

Views: 2016

Answers (5)

Artem Barger
Artem Barger

Reputation: 41232

I note you are not interesting in workarounds, but it seems as much usefull the native way. Do not alias, but define as function and put .bashrc:

revert_all() { for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done}

Just tested:

alias revert_all="for FILE in \`svn stat | awk '{print $2}'\`; do svn revert $FILE; done"

works.

Upvotes: 3

ghostdog74
ghostdog74

Reputation: 342403

why do you want to use alias? define it as a function and put it inside a file. This will act as a "library". When you want to use the function, source it in your scripts.

Upvotes: 2

Dennis Williamson
Dennis Williamson

Reputation: 360103

Backticks make getting the quoting right very difficult.

Try this:

alias revert_all='for FILE in $(svn stat | awk '{print $2}'); do svn revert "$FILE"; done'

Using $() allows quotes inside it to be independent of quotes outside it.

It's best to always use $() and never use backticks.

Upvotes: 1

Michael Hackner
Michael Hackner

Reputation: 8645

Can’t you just do svn revert --recursive?

Upvotes: 2

William Pursell
William Pursell

Reputation: 212248

The simplest way is to avoid the backticks completely with:

svn stat | awk '{print $2}' | while read FILE; do svn revert $FILE; done

The next is to use eval.

Upvotes: 1

Related Questions