【问题标题】:Piping wget into curl管道 wget 进入 curl
【发布时间】:2016-11-08 17:35:32
【问题描述】:

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

有什么线索吗?

【问题讨论】:

    标签: bash curl wget


    【解决方案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" )
    

    【讨论】:

    • 感谢@Barmar - 最后结果证明我不需要 subshel​​l ;-) 但现在我知道了区别
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2012-02-15
    相关资源
    最近更新 更多