一个svn命令的bash别名用管道输入到awk

时间:2009-12-02 15:53:19

标签: 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 stat立即运行 - 没有好的

然后我尝试双引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

5 个答案:

答案 0 :(得分:3)

我不是你在解决方法方面没什么兴趣,但看起来和原生方式一样多。不要别名,而是定义为函数并放入.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"

作品。

答案 1 :(得分:2)

你不能只做svn revert --recursive吗?

答案 2 :(得分:2)

为什么要使用别名?将其定义为函数并将其放在文件中。这将充当“图书馆”。如果要使用该功能,请在脚本中提供。

答案 3 :(得分:1)

最简单的方法是完全避免反引号:

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

接下来是使用eval。

答案 4 :(得分:1)

反引号使得引用非常困难。

试试这个:

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

使用$()允许其中的引号独立于其之外的引号。

最好始终使用$()never use backticks