2013-12-22 65 views
3

我正在運行一個perl腳本,該腳本使用參數調用bash腳本。 它從套接字讀取一個字符串,將其拆分並將其保存到數組中。這就是這樣一個字符串的樣子:如何傳遞一個空格字符串作爲http POST數據使用curl

22.12.13 20:21:12;RING;0 

第一個數組元素是日期,它作爲參數傳遞給bash腳本。 在bash腳本中,參數作爲POST數據傳遞給curl。

我不知道如何處理字符串中的日期和時間之間的空間。 curl正確執行,服務器以OK(200)響應。然而,它只是作爲POST數據傳遞的第一部分(直到空間)。時間不見了。 捲曲給出瞭如下因素的錯誤:

curl: (6) Couldn't resolve host '20:21' 

這些都是相關的行從腳本:

 #perl script 
    my $EXTPRO="/path/to/script.sh"; 
if ($_ =~ /RING/){ 
    my @C = split(/;/); 
    my @args = ($EXTPRO, $nr, $C[0], "String"); 
    system(@args); 


#bash script: 
curl http://url.com/add -F foo=$3 -F date=$2 -F foobar=$1 
+0

編輯bash腳本以使用引號括起$ 2。日期= 「$ 2」 – Miller

回答

4

的時間正確傳遞,這只是你的bash腳本,需要被編輯爲您的錯誤反映。

curl http://url.com/add -F foo=String -F date=22.12.13 20:21:12 -F foobar=Fake_NR_Data 

該時間被視爲第二個URL。爲了讓你的bash正常工作,只需附上2美元的報價

#bash script: 
curl http://url.com/add -F foo=$3 -F date="$2" -F foobar=$1 
0

@米勒的答案是好的。我自己的選擇是使用雙引號簡單,可預測值,併爲別的一個臨時文件,特別是動態JSON數據:

echo $json_data > data1.json 
[curl -X POST --data-urlencode "foo=$3" --data-urlencode "date=$2" --data-urlencode [email protected] 

否則,空格,引號和所有創建bash的主要頭痛命令行,並導致疑難解答變得非常困難。 data1.json包含urlencoding之前的確切數據。

相關問題