我经常输入此命令,并试图将其别名,但由于某种原因,我不能这样做。
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
答案 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。