bash - 如何在bash脚本中执行存储在heredoc中的curl命令?

标签 bash curl heredoc

当编写bash脚本时,我想将整个curl命令存储在heredoc中以获得更好的布局。以下工作正常:

#/bin/bash

read -r -d '' command1 <<- MULTI_STRING_SCOPE
  curl -v www.stackoverflow.com
MULTI_STRING_SCOPE

但是当使用 -d 选项添加一些 json 数据时,该命令执行得很奇怪。例如:

#/bin/bash

read -r -d '' command2 <<- MULTI_STRING_SCOPE
  curl -v www.stackoverflow.com
    -d '{
      "hello":"world"
    }'
MULTI_STRING_SCOPE
response2=$(${command2})

来自终端的错误日志:

curl: (3) URL using bad/illegal format or missing URL
curl: (3) unmatched close brace/bracket in URL position 1:
}'

而且curl似乎将行}'作为单独的url,因此json数据没有作为一个单元发送。

如何解决这个问题?任何建议都将受到高度赞赏。

最佳答案

我是从this post学到的使heredoc与curl命令一起使用。

正如 @Gordon Davisson 在当前帖子中发表的评论,我们不应该将命令与数据混合在一起。由于 -d 选项设置的 json 数据只是数据,其他部分是命令,所以我决定使用 heredoc 只存储 json 数据,其余部分保留命令本身,而不是通过 heredoc 将它们存储在字符串中。

结果 bash 脚本应该是这样的:

#/bin/bash

response3=$(curl -v www.stackoverflow.com \
  -d @- <<- MULTI_STRING_SCOPE
        {
            "hello":"world"
        }
    MULTI_STRING_SCOPE
  )

注意:heredoc 缩进仅适用于制表符,不适用于空格。请小心,尤其是当您使用像 Visual Studio Code 这样的编辑器时,它可能已经为您将缩进设置为空白。

关于bash - 如何在bash脚本中执行存储在heredoc中的curl命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69776439/

相关文章:

c - 如何在C中使用curl获取响应值

bash - 将此处的文档命令通过管道传输到日志文件

bash - Shell 脚本 - 在文件中智能替换并在第二个文件中查找

curl - 启用 OAuth Drupal 7 模块时出错

arrays - 元素中有空格的 Bash 数组

python - 无法安装软件包(通过 Powershell 在 venv 中)

php - &lt;/script&gt; 在 PHP heredoc 中

php - 在heredoc中使用增量运算符

javascript - 在 html 页面上显示命令行输出

linux - 在 bash 脚本中执行 virtualenv 或 pip 时 trap INT 不起作用