0

我正在尝试使用 bash 脚本发送谷歌聊天消息。当我定义局部变量或使用简单文本时,它可以工作。但是当我获取一个文件并使用该文件中定义的变量时,我得到了错误。

这有效:

#!/bin/bash
MSG="Data"
curl -H 'Content-Type: application/json' -X POST "$CHAT_URL" --data @<(cat <<EOF
{
  "cards": [
    {
      "sections": [
        {
          "widgets": [
            {
                "textParagraph": {
                    "text": "Msg: $MSG"
                }
            }]}]}]}
EOF
)

这不会:

#!/bin/bash
source file.txt      # contents: MSG=Data
echo $MSG            # variable defined in file.txt
curl -H 'Content-Type: application/json' -X POST "$CHAT_URL" --data @<(cat <<EOF
{
  "cards": [
    {
      "sections": [
        {
          "widgets": [
            {
                "textParagraph": {
                    "text": "Msg: $MSG"
                }
            }]}]}]}
EOF
)

输出:

Data
{
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Closing quote expected in string.\n\n^",
    "status": "INVALID_ARGUMENT"
  }
}
4

1 回答 1

0

这个问题基本上 是shell脚本对编码和行尾敏感吗? JSON中 是否允许使用多行字符串?

您的文件有 Windows 行尾 ( \r\n)。因此,从您的文件加载的字符串以\r. JSON 字符串不允许包含控制字符,因此会出现错误消息。

要解决此问题,请使用dos2unix file.txt.

于 2021-08-12T18:31:11.290 回答