重击:直接执行命令和执行存储在字符串

时间:2018-10-08 10:32:36

标签: bash curl

询问

我试图了解直接执行命令与在使用Bash时将命令存储在字符串中之间的区别。

详细信息

我正在尝试执行CURL POST命令。由于我是通过从用户那里获取输入来构造命令的,因此我想记录我正在执行的确切命令。为此,我将命令构造为字符串并尝试执行它。但是,我发现在两种情况下它都不能以相同的方式起作用(我用伪值替换了真实值以确保我不暴露机密信息):

curl_command_1="curl --write-out "%{response_code}" --silent -X POST -H 'Content-Type: application/json' "${http_command}/resource" -d '{ "argument1": "'"${argument1}"'", "argument2": "'"${argument2}"'", "argument3": "'"${argument3}"'" }'"
echo $curl_command_1
ret_val_1=eval $curl_command_1
echo $ret_val_1
ret_val_2=`$curl_command_1`
echo $ret_val_2
ret_val_3=`curl --write-out "%{response_code}" --silent -X POST -H 'Content-Type: application/json' "${http_command}/resource" -d '{ "argument1": "'"${argument1}"'", "argument2": "'"${argument2}"'", "argument3": "'"${argument3}"'" }'`
echo $ret_val_3

curl_command_2="curl --write-out "%{response_code}" --silent -X POST -H 'Content-Type: application/json' "${http_command}/resource" -d '{ "argument1": \"${argument1}\", "argument2": \"${argument2}\", "argument3": \"${argument3}\" }'"
echo $curl_command_2
ret_val_1=eval $curl_command_2
echo $ret_val_1
ret_val_2=`$curl_command_2`
echo $ret_val_2
ret_val_3=`curl --write-out "%{response_code}" --silent -X POST -H 'Content-Type: application/json' "${http_command}/resource" -d '{ "argument1": \"${argument1}\", "argument2": \"${argument2}\", "argument3": \"${argument3}\" }'`
echo $ret_val_3

观察

  1. 第三个案例在成功案例和失败案例中都可以正常工作。
  2. 在前两种情况下,无论成功还是失败,我都会得到大量的数字作为输出。不知道为什么。

确认使用的值:

  1. 由于这是POST命令,因此我没有在一次执行中执行所有三个具有相同值的命令。在每种情况下,我都使用了三个参数的允许值。

0 个答案:

没有答案