管道将成为卷曲

时间:2016-11-08 17:35:33

标签: bash curl wget

我将输出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

有任何线索吗?

1 个答案:

答案 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" )