2013-10-15 78 views
0

在我以前question我创建了一个由图案恢复文件的svn命令:运行bash命令的功能

svn st | grep SomeFolderA | awk {'print $2'} | xargs svn revert 

现在我想让它接受参数(文件模式)的指令并运行上述命令通过使用参数而不是SomeFolderA。我尝试添加这对我.bash_profile文件:

function revert() { 
    "svn st | grep '$1' | awk '{print \$2}' | xargs svn revert" ; 
} 

当我运行revert SomeFolderA我得到这个输出:

-bash: svn st | grep 'SomeFolderA/' | awk '{print $2}' | xargs svn revert: No such file or directory 

我也使用的完整路径为svn尝试,但它仍然无法正常工作。我错过了什么?

+0

'“SVN ST | grep'$ 1'| awk'{print \ $ 2}'| xargs svn revert“'尝试执行带有该名称的命令。删除引号。参见http://www.linuxjournal.com/content/return-values-bash-functions关于bash函数如何返回值。 –

+0

[如何从bash函数返回字符串值]的可能重复(http://stackoverflow.com/questions/3236871/how-to-return-a-string-value-from-a-bash-function) –

+0

@ivan_pozdeev - 我做了一些挖掘,我承认bash脚本远没有成为我最强大的一方。我认为很容易看到,这不是一个没有深思熟虑的问题。 SO正好解决了这些类型的问题,不仅是难以预见的问题。我们使用社区来加快我们的工作。通过得到这个答案,你可以帮我腾出几个小时学习。 我真的不知道你发布的问题是如何重复的。猜我虽然reg bash脚本比noobier更好。 – Avi

回答

1

与您的命令字符串创建一个变量,并执行它

function revert() { 
    cmd="svn st | grep '$1' | awk '{print \$2}' | xargs svn revert" 
    eval $cmd 
} 
+0

它没有工作。但是我添加了'eval $ cmd'(而不是'$ cmd'),它可以工作。修复你的答案,包括这一行,我会接受它。 – Avi

+0

完成了,谢谢Avi。 –

0

无需使用功能,把关闭该功能,只需在你下面使用脚本:

svn st | grep "$1" | awk '{print \$2}' | xargs svn revert 
+0

我试过,但得到这个语法错误: 'AWK:语法错误的源代码行1 上下文 \t >>><<< AWK:在源线1 \t非法语句中缺少}' 有任何理念? – Avi

+1

'$'被两次转义,一次是在单引号内,另一次是反斜杠。反斜杠可以省略。 – chepner

+1

@Cheers该函数是问题的关键部分:它在'.bash_profile'中定义,以便它可以在命令行中使用,而不必键入整个管道。 – chepner