通过管道传输到awk的svn命令的Bash别名

通过管道传输到awk的svn命令的Bash别名,svn,bash,awk,Svn,Bash,Awk,我经常键入此命令,并尝试将其命名为别名,但由于某些原因无法执行 for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done 这显然会导致大量svn恢复 当我给它取别名时: alias revert_all="for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done" svn统计立即运行-不好 然后我尝试双重引用awk部分: alias

我经常键入此命令,并尝试将其命名为别名,但由于某些原因无法执行

for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done
这显然会导致大量svn恢复

当我给它取别名时:

alias revert_all="for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done"
svn统计立即运行-不好

然后我尝试双重引用awk部分:

alias revert_all='for FILE in `svn stat | awk "{print $2}"`; do svn revert $FILE; done'
但是这不能正常运行-awk部分不能执行(我得到M值并尝试运行svn revert M)

下一次尝试,使用转义的单引号:

alias revert_all='for FILE in `svn stat | awk \'{print $2}\'`; do svn revert $FILE; done'
命令未完成,bash正在等待另一个滴答声

我知道我可以编写脚本,或者将awk命令放在文件中,但我不想寻找解决方法。有件事我不知道。这是什么


TIA

我不是说你对解决办法不感兴趣,但看起来也很自然。不使用别名,但定义为函数和put.bashrc:

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

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

有效。

最简单的方法是使用以下方法完全避免回跳:

svn stat | awk '{print $2}' | while read FILE; do svn revert $FILE; done svn stat | awk'{print$2}'|读取文件时;做svn还原$FILE;完成
下一步是使用eval。

你不能只做
svn revert——递归的

倒勾使正确引用非常困难

试试这个:

alias revert_all='for FILE in $(svn stat | awk '{print $2}'); do svn revert "$FILE"; done'
使用
$()
允许它内部的引号独立于它外部的引号


最好始终使用
$()
和。

为什么要使用alias?将其定义为函数并将其放入文件中。这将作为一个“图书馆”。当您想使用该函数时,请在脚本中找到它的来源。

原因之一:未能使用xargs(很多人喜欢xargs)、回答含糊不清w.r.t.eval,或者最有可能的原因是正确的解决方案是使用函数而不是别名。$()的问题在于它不可移植且不适合bash,尽管它非常流行,不是到处都安装。嗯。。。POSIX指定
$()
:-除此之外,问题被标记为“[bash]”