将 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" )
我正在将 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" )