2012-09-20 33 views
0

我發現我的問題在這裏的最佳解決方案:Howto fix subversion «!» status使用xargs的兩次在一個線修復顛覆狀態

但現在,我只想寫一個小腳本來做到這一點。

像這樣:

svn status | grep '\!' | awk '{print $2}' | xargs svn revert 

svn status | grep '\!' | awk '{print $2}' | xargs svn delete 

但在一行。

因爲在svn恢復之後,「svn status | grep'!'」不返回任何結果。合理的。

我認爲我發現了一個解決方案:Putting the data passed to xargs twice in one line但我在英語中生疏並且命令行不是我強大的技能。

回答

1
svn status | grep '\!' | awk '{print $2}' | tee list.$$ | xargs svn revert 
xargs svn delete < list.$$ 
rm list.$$ 

tee命令是像爲T管件;輸出的一個副本轉到每個命名文件,另一個轉到標準輸出。在這裏,我只命名了一個文件。這會強制在任何刪除之前發生所有還原。名稱list.$$是保護腳本免於踐踏其他進程的文件的簡單方法;有像mktemp這樣的程序可以用來創建更安全,更難預測的名稱。 OTOH,如果你不是在惡劣的環境中運行,這不太可能。如果你是真細心,你會創建一個trap以確保文件被清除:

tmp=${TMPDIR:-/tmp}/list.$$ 
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15 

svn status | grep '\!' | awk '{print $2}' | tee $tmp | xargs svn revert 
xargs svn delete < $tmp 

rm $tmp 
trap 0 

有跡象表明,可以嘗試其他招數,但至少他們中的一些不保證順序操作。例如,過程中的取代bash

svn status | grep '\!' | awk '{print $2}' | tee >(xargs svn revert) | xargs svn delete 

每個文件將被恢復兩者和刪除,但測序是不可預測的。

+0

工作正常與陷阱。只是一些錯誤來恢復目錄,但後來svn刪除工作。非常感謝你。 –

1

這兩個命令在一行中。注意xargs的完全丟失。不是說xargs不是很好,它只是在這裏不需要。

x="$(svn status | grep '\!' | awk '{print $2}')"; svn revert "$x" && svn delete "$x" || echo "no svn delete $?"

注意,SVN刪除將無法​​運行,如果SVN恢復失敗。 「no svn delete」表示其中一個svn命令失敗。

+0

我會把這個技巧作爲另一個解決方案。也謝謝你。 –