【问题标题】:Shell script- CURL script returning errorShell 脚本 - CURL 脚本返回错误
【发布时间】:2014-06-06 14:28:56
【问题描述】:

这有点棘手。我有一个 shell 脚本来在我们的 JIRA 中创建任务。我在 Ubuntu Server(新手)上运行它。

我在脚本中有一个变量如下:

SCRIPT="curl -D- -u $USER:$PASSWORD -X POST --data @$SAMPLE_FILE -H \"Content-Type:   application/json\" $REST_URL"

我回显这个脚本并使用 $SCRIPT 我的 shell 脚本运行它。当我 bash 脚本时,它总是返回错误 "curl: (6) Couldn't resolve host 'application'"

但是,如果我尝试单独运行打印的 SCRIPT(我回应过),它会创建一个任务。我知道这是一个小问题,但我无法解决!

有什么建议吗?

【问题讨论】:

  • 如何执行 $SCRIPT 中的命令?我不记得正确,但我记得有一些关于如何执行类似事情的警告。您可能还想尝试exec "$SCRIPT"exec $SCRIPT$( $SCRIPT )。当我在家时,我需要对此进行测试。也请使用\" 转义$SAMPLE_FILE$USER:$PASSWORD,因为您无法确定它们是否包含空格。
  • 感谢您的意见。我只是将它作为 $SCRIPT 运行。但我只是尝试了你所有的建议(exec "$SCRIPT" 或 exec $SCRIPT 或 $( $SCRIPT ) )但徒劳无功。还是有更好的方法?

标签: bash shell ubuntu curl


【解决方案1】:

按照bash tag wiki 的建议,我们可以通过shellcheck 运行您的代码以自动检查常见问题:

$ shellcheck yourscript

In yourscript line 1:
SCRIPT="curl... -H \"Content-Type: application/json\" $REST_URL"
       ^-- SC2089: Quotes/backslashes will be treated literally. Use an array.

In yourscript line 2:
$SCRIPT
^-- SC2090: Quotes/backslashes in this variable will not be respected.

好的,那么let's use an array

command=(curl -D- -u "$USER:$PASSWORD" -X POST --data "@$SAMPLE_FILE" -H "Content-Type:   application/json" "$REST_URL")

# Print what we'll execute:
printf "%q " "${command[@]}"
echo

# Execute it:
"${command[@]}"

【讨论】:

    猜你喜欢
    • 2022-10-23
    • 2018-08-29
    • 2013-07-16
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多