我将输出wget输出到curl。从终端运行它,所有变量都被正确的值正确替换,退出代码为0
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
有任何线索吗?
答案 0 :(得分:1)
$(command)
是command substitution的语法。这意味着执行命令,然后将输出替换回命令行。它通常用于参数,例如
printf "%3.2f" $(some command)
在您的情况下,由于您之前没有命令,它将尝试作为shell命令执行curl
命令的输出。因此,除非您下载的网页是有效的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" )