2016-11-08 162 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