将 wget 管道化为 curl

Piping wget into curl

我正在将 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 加上错误消息 "No such file or directory"

$( 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

有线索吗?

$(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" )