2017-07-06 82 views
0

我試圖從命令行執行一個bash腳本。 有時它需要一個包含空格的參數。從命令行執行一個bash腳本,它需要一個空格參數

bash test.sh -l "path/to/image/may contain spaces.png" 

什麼是正確的方法來提供此?我試圖逃脫\但無濟於事。

我收到以下錯誤;

bash splash.sh -b \#\000000 -l \"img/Rev Logo.jpg\" 
    convert: unable to open image ''"img/Rev'': No such file or directory @ error/blob.c/OpenBlob/3093. 

這涉及到這一點的代碼;

logo="$1" 

if checkBackground -eq 1 
     then 
     convert -size $size canvas:$back -background $back $tmp01 
fi 

convert \'$logo\' -background $back $tmp02 

composite $tmp02 -gravity center $tmp01 output.jpg 
+1

無論是雙引號引起的變量或使用''\\是合適的。如果你的嘗試失敗了,也許這個腳本沒有適當地引用它的使用參數。更多的細節(例如,test.sh的代碼示例)是必需的。 –

+0

我剛剛更新了我的問題,提供了更多信息和代碼示例。謝謝 –

回答

2

如果第一個參數的腳本是「富欄」,那麼這行:

convert \'$logo\' -background $back $tmp02 

正在經過作爲第一個參數,以convert字符串'foo並通過第二個參數bar'。你可能不希望這樣。將該行更改爲:

convert "$logo" -background "$back" "$tmp02" 

通常,雙引號任何變量。

而當您調用腳本時,只需引用該參數即可。如果調用腳本:

bash splash.sh -b \#\000000 -l \"img/Rev Logo.jpg\" 

,那麼你傳遞兩個單獨的參數:"img/RevLogo.jpg"。有一個雙引號的文件名是完全有效的,但非常不尋常。如果你想通過一個參數img/Rev Logo.jpg,你要調用你的腳本:

bash splash.sh -b "#000000" -l "img/Rev Logo.jpg" 

bash splash.sh -b \#000000 -l img/Rev\ Logo.jpg 
相關問題