2014-11-04 74 views

回答

0

似乎分開命令1的輸出,並將其發送到command2的三個不同的參數最好的方法是使用帶有-t選項xargs的這是通過所有作爲參數是這樣的:

$ ./command1 | xargs -t command2 

來源
https://serverfault.com/users/249134/chaosc

1

只需使用不帶引號的命令替換:

$ ./command2 $(./command1) 

然而,這也科目command1的輸出路徑名的產生,因此,如果輸出可能包括像*.txt,你的風險是正擴展到多個單詞之前被傳遞到command2。在這種情況下,你需要使用

$ read arg1 arg2 arg3 <<< "$(./command1)" 
$ ./command2 "$arg1" "$arg2" "$arg3" 

$ read -a args <<< "$(./command1)" 
$ ./command2 "${args[@]}" 

到輸出分割成3個字,而不對它們進行路徑名的產生。


這將不起作用如果command1輸出看起來像

"word1a word1b" word2 

,你希望能夠到兩個參數,word1a word1bword2傳遞給command2,但獲得這種權利是充分棘手要求更多關於什麼command1可以輸出以提供正確的解決方案的細節。

+0

command1以純文本格式輸出輸出:hostname:port username password。 command2假設再次讀取三個參數,如主機名:端口用戶名密碼 – Addy 2014-11-04 18:52:09

+0

在這種情況下,我會推薦使用'read'的版本。我假設主機,端口和用戶名都不能包含任何空格,但我會毫不猶豫地對密碼做任何假設。 (如果密碼開始或以空白結束,它會失敗,但我沒有辦法從'command1'的輸出中檢測到這一點)。 – chepner 2014-11-04 19:12:14

相關問題