2013-10-15 128 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