2011-10-03 14 views
4

一些研究揭示了一些有用的stackexchange職位,即expanding variable in CURL,但給出的答案似乎並不恰當處理有空格的bash的變量。擴大與空間變化成捲曲POST變量

我一個變量設置爲AWK的輸出,解析子串(實際上截斷爲150個字符)。我試圖通過curl發佈的字符串中有空格。

當我使用下面的捲曲參數,POST變量Body被設定爲所述第一空間之前的字符串的一部分。

curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/GUID/SMS/Messages.xml' -d 'From=DIDfrom' -d 'To=DIDto' -d 'Body="'$smsbody'" -u SECGUID

smsbody被設定爲:

smsbody="$(echo $HOSTNAME$ $SERVICEDESC$ in $SERVICESTATE$\: $SERVICEOUTPUT$ | awk '{print substr($0,0,150)}')"

使張貼的smsbody唯一部分是$HOSTNAME$(這恰好是沒有任何空格字符的字符串)。

什麼是捲曲的語法我應該使用嵌套bash的變量適當擴大,但被視爲一個單一的數據字段?

看起來很瑣碎,但我惹了一段時間沒有運氣的報價。我認爲更好的CLI-fu可以在一秒之內處理它。

謝謝!

回答

3

它看起來像你以前身體一個額外的單引號。您還需要雙引號或$ smsbody不會被評估。

試試這個:

curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/GUID/SMS/Messages.xml' \ 
    -d 'From=DIDfrom' -d 'To=DIDto' -d "Body=$smsbody" -u SECGUID 

如果$ s爲仍是一個問題(我不認爲空間是),試試這個前面加上一個\對他們說:

smsbody2=`echo $smsbody | sed 's/\\$/\\\\$/g'` 
curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/GUID/SMS/Messages.xml' \ 
    -d 'From=DIDfrom' -d 'To=DIDto' -d "Body=$smsbody2" -u SECGUID 

如果我運行nc -l 5000並將twilio地址更改爲localhost:5000,我看到smsbody變量正常進入。

[email protected]:~$ nc -l 5000POST/HTTP/1.1 
Authorization: Basic U0VDR1VJRDphc2Q= 
User-Agent: curl/7.21.6 (x86_64-apple-darwin10.7.0) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.5 libidn/1.20 
Host: localhost:5000 
Accept: */* 
Content-Length: 45 
Content-Type: application/x-www-form-urlencoded 

From=DIDfrom&To=DIDto&Body=goliath$ $ in $: 
+0

感謝馬特!當我嘗試'Body ='$ smsbody''時,curl字面上發送字符串'$ smsbody'(字面意思,不擴展變量)。我會嘗試在空格字符前使用'sed'在字符串中添加轉義字符'\',並按照您的建議查看是否可行! – mbrownnyc

+1

我剛剛做了一個編輯,因此請確保您的答案是最新的。祝你好運! –

+0

這工作!非常感謝!捲曲只能在逃離空間字符時展開卷曲內的變量。我簡單地試圖兩次管道而不是設置額外的bash變量。我會分開處理這個問題。現在我只是使用條件'&&'(可能)在一行中執行兩個命令。 – mbrownnyc