2011-11-07 38 views
5

我必須編寫一個腳本來生成並執行包含文件名的可變數量參數的命令。這些文件名可能包含空格,並且所有內容都必須正確使用或不使用空格。在shell腳本中使用空格執行動態創建的命令

例如,這產生的命令可能是這樣的:

curl --data-urlencode "[email protected]/tmp/some folder/data.txt" http://www.someurl.com 

如果我使用硬編碼的命令並執行它,它都運行良好,有和沒有空格。但是,如果我在字符串變量中創建命令文本並執行字符串內容,則似乎該命令不考慮引號,僅使用文件的第一部分:

腳本(簡化,只是想象命令字符串使用複雜的規則)發佈:

#!/bin/sh 
#prepare 
command="curl --data-urlencode \"[email protected]/tmp/some folder/data.txt\" www.someurl.com" 
#execute 
$command 

結果:

$ ./test.sh 
Warning: Couldn't read data from file ""[email protected]/tmp/some", this makes an 
Warning: empty POST. 
curl: (6) Couldn't resolve host 'folder' 

我嘗試不同的東西,交換報價的風格,用的東西象exec,但我could'nt得到這個工作。

任何幫助,將不勝感激

感謝

注:我要補充所有這些測試是在Cygwin完成。關於路徑語法可能很重要。

+0

嘗試使用替代空間 「\」 – spicavigo

+0

@spicavigo試過已經沒有結果:/ – Shtong

+0

你可以換出一些dbl-quotes for single quotes?,ie command =「curl --data-urlencode'param_value @/tmp/some folder/data.txt'www.someurl.com」...祝你好運! – shellter

回答

0

你試過:

command='curl --data-urlencode "[email protected]/tmp/some\ folder/data.txt" www.someurl.com' 
+0

我做到了,但很抱歉,結果相同! – Shtong

+0

@Shtong:我忘了刪除第二個引號的轉義。現在在我的代碼中更改了它。 – flesk

+0

哦,沒有看到你的錯誤,但有無錯誤的錯誤是一樣的:) – Shtong

4

你應該使用eval:

eval "$command" 
+0

沒有運氣。該命令不起作用,但是因爲它在當前目錄而不是在目錄目錄中查找捲曲。 (說/ home/Shtong /捲曲不存在) – Shtong

+0

作爲一個魅力對我來說=) –