2016-11-08 151 views
1

我將wget捲曲捲曲成捲曲。從終端運行它,所有的變量都正確通過正確的價值觀退出代碼替換爲0將wget捲曲成捲曲

wget -O - $DOWNLOAD_URL | curl -H "Authorization:token $TOKEN" -H "Accept:application/vnd.github.v3+json" -H "Content-Type:application/zip" --data-binary @- "https://uploads.github.com/repos/myorg/myrepo/releases/$RELEASE_ID/assets?name=$NAME.zip" 
echo $? # 0 

運行它的腳本里面的子shell哪裏還所有的變量都正確地更換 和狀態代碼爲127加錯誤消息「沒有這樣的文件或目錄「

$(wget -O - $DOWNLOAD_URL | curl -H "Authorization:token $TOKEN" -H "Accept:application/vnd.github.v3+json" -H "Content-Type:application/zip" --data-binary @- "https://uploads.github.com/repos/myorg/myrepo/releases/$RELEASE_ID/assets?name=$NAME.zip") 
echo $? # 127 

任何線索?

回答

1

$(command)command substitution的語法。它意味着執行該命令,然後將輸出替換回命令行。它通常用於參數,例如

printf "%3.2f" $(some command) 

在你的情況,因爲你沒有一個命令之前,它會嘗試執行curl命令的輸出作爲一個shell命令。因此,除非您正在下載的網頁是有效的shell命令,否則當您嘗試執行輸出時會出現錯誤。

如果你只是想在一個子shell執行命令,但不會做命令替換,只是用括號不$

(wget -O - $DOWNLOAD_URL | curl -H "Authorization:token $TOKEN" -H "Accept:application/vnd.github.v3+json" -H "Content-Type:application/zip" --data-binary @- "https://uploads.github.com/repos/myorg/myrepo/releases/$RELEASE_ID/assets?name=$NAME.zip") 
+0

感謝@Barmar - 它原來,我並不需要子shell結束;-)但現在我意識到不同之處 – szydan