2013-01-02 46 views
1

確定這很簡單。 ive'嘗試了許多可能性,但沒有運氣。bash字符串作爲引號中的可執行文件的參數

即時通訊尋求在shell中執行以下操作。

./secondexecutable -t "A string with spaces" -s "Another string with spaces" -o outfile.txt 

問題是可執行文件從一個可執行文件獲取字符串,然後應用到第二個可執行文件。 第二個可執行文件需要引號(單個或雙)以保留空格。

tmp=`./firstexecutable` 

echo $tmp prints out the following  -t "A string with spaces" -s "Another string with spaces" 


./secondexecutable $tmp -o outfile.txt 

殼截斷參數,因此圍繞在你的腳本變量它基本上類似於

./secondexecutable -t "A" -s "Another" -o outfile.txt 

回答

0

在我看來,這是一個糟糕的設計。一旦您連接與空間的多個字符串成一個單一的字符串,有沒有簡單的方法,他們沒有回落到eval

eval ./secondexecutable "$tmp" -o outfile.txt 

威力做分開,但eval'ing任意字符串

的風險提防

如果可以,您應該重新工作第一個可執行文件。如果它可以爲-t和-s選項返回,那麼您的生活將會更容易。舉例來說,如果它甚至可以輸出在不同的行的值,如:

A string with spaces 
Another string with spaces 

你可以這樣做:

{ IFS= read -r t_option; IFS= read -r s_option; } < <(./firstexecutable) 
./secondexecutable -t "$t_option" -s "$s_option" -o output.txt 

或者,如果這兩個值不以某種方式相關,得到第一可執行文件一次計算一個

./second -t "$(./first -t)" -s "$(./first -s)" -o output.txt 
+0

謝謝。生病嘗試評估。但這裏沒有設計。它從第一個可執行文件輸出。 –

+0

但爲什麼你有一個可執行文件返回一個選項字符串?正如你所看到的,你遇到嵌入式引號僅僅是字符的問題。你有任何控制權重新工作的第一個可執行文件,只需返回-t和-s選項的值? –

2

把雙引號:

./secondexecutable "$tmp" -o outfile.txt 

這裏是當你不使用會發生什麼報價:

$ cat countargs 
#!/bin/sh 

echo $# 
$ var='O HAI I IZ A VAR' 
$ ./countargs $var 
6 
$ ./countargs "$var" 
1 
+0

其實我試過雙引號。也許引號內的引號是個問題。 –

相關問題