Reputation: 12860
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
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
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
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
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