【问题标题】:How to use EOF with curl in Fish Shell?如何在 Fish Shell 中使用 EOF 和 curl?
【发布时间】:2021-11-17 11:30:41
【问题描述】:

如何在 Fish shell 中使用 EOF/HEREDOC 和 curl。根据question,这是不可能的,建议使用管道连接到 STDOUT,但应用程序必须支持这一点,并专门寻找 STDIN。上游 Fishissue #530 已锁定后续跟进。我将如何在 Fish 中转换这个常见示例?

curl \
--request POST "https://wwww.example.com/api/v1/test/delete" \
--header "Content-Type: application/json" \
--data @- << EOF
{}
EOF

【问题讨论】:

  • "但是应用程序必须支持它并且特别是在寻找标准输入" - HEREDOCS 也通过标准输入发送!如果您可以使用 HEREDOCS,则可以使用标准输入中的其他类型的管道。
  • heredocs 的语义是:1. 读取/解释字符串,2. 将其写入临时文件,3. 以该文件作为标准输入启动进程。所以这里没有真正的魔法发生,一切都只是标准输入!执行echo foo &gt; /tmp/somefile; proc &lt; /tmp/somefile; rm /tmp/somefile 基本上会发生什么,因此您可以通过执行echo foo | proc 来跳过临时文件。
  • 这能回答你的问题吗? What is Fish equivalent for <<EOF in Bash
  • 即是的,它是重复的,因为您可以简单地使用管道。你不能的想法只是一个误解。
  • 我为重复的问题和答案苦苦挣扎了一段时间,但它没有回答我的问题。并且答案实际上不适用于curl。所以这个问题是关于如何使用 curl 和 STDIN @- 作为不支持 HEREDOC/EOF 的 Fish 的解决方法。

标签: shell curl fish


【解决方案1】:

您可以将输出通过管道传输到 STDOUT 并使用 @-:

使用@- 将使 curl 从标准输入读取头文件。
来源:man curl

echo " \
{}
" | \
curl \
--request POST "https://wwww.example.com/api/v1/test/delete" \
--header "Content-Type: application/json" \
--data @-

这不像 EOF 那样干净,但确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多