2012-06-10 70 views
0

我有一個樣品這樣的代碼:xargs無法獲取用戶輸入?

CMD="svn up blablabla | grep -v .tgz" 
echo $CMD | xargs -n -P ${PARALLEL:=20} -- bash -c 

的目的是運行在並行更新SVN。但是當遇到衝突時,應該提示用戶選擇幾個選擇,它只是通過而不用等待用戶輸入。並顯示一個錯誤:

Conflict discovered in 'blablabla'. 
Select: (p) postpone, (df) diff-full, (e) edit, 
    (mc) mine-conflict, (tc) theirs-conflict, 
    (s) show all options: svn: Can't read stdin: End of file found 

有沒有什麼辦法可以解決這個問題?

謝謝

+1

問題是,svn的標準輸入不是控制檯。這是xargs的輸入,即回聲的輸出。 – Pat

回答

0

是的,有一種方法可以解決這個問題!請參閱how to prompt a user from a script run with xargs的答案。長話短說,使用

xargs -a FILENAME your_script 

xargs -a <(cat FILENAME) your_script 

第一個版本實際上從文件中讀取行,而第二個假貨從一個文件中,便於在管鏈使用xargs的讀線用awk或perl。如果你不想打破空白,記得使用-0標誌!