2014-06-06 225 views
0

这会变得有点棘手。我有一个shell脚本来在我们的JIRA中创建任务。我在Ubuntu服务器上运行它(一个新手)。Shell脚本 - CURL脚本返回错误

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

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

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

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

有什么建议吗?

+0

如何在$执行命令脚本?我不记得它是正确的,但我记得有一些关于如何执行这样的事情的警告。您可能还想尝试'exec“$ SCRIPT”'或'exec $ SCRIPT'或'$($ SCRIPT)'。当我在家时,我需要对此进行测试。因为你不能确定它们是否包含空格,所以请同时使用'\ SAMPLE_FILE'和'$ USER:$ PASSWORD'来跳过。 –

+0

谢谢你的输入,我只是把它作为** $ SCRIPT **来运行。我只是尝试了所有的建议(exec“$ SCRIPT”或者exec $ SCRIPT或者$($ SCRIPT)),但是徒劳无功,还是有更好的方法呢? – user3715398

回答

2

正如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[@]}"