【发布时间】:2014-01-08 07:56:32
【问题描述】:
我想在 bash 脚本中调用函数时记录各种事情,所以我想找一个特殊的地方来做这件事
function CallAndLog {
echo "$@" > /tmp/debug
res=$("$@" 2> /tmp/error)
if [ $? -gt 0 ]
then
echo "error : $(</tmp/error)" >> /tmp/log
fi
echo "$res" >> /tmp/log
}
val="a test"
CallAndLog curl --data '"'"query=$val"'"' http://google.com
我明白了
- /tmp/debug
curl --data "query=a test" http://google.com
- /tmp/错误
curl: (6) 无法解析主机'test'' % 总计 % 接收 % Xferd 平均速度 时间 时间 时间 当前 下载上传总花费剩余速度 100 967 100 959 100 8 1060 8 0:00:01 --:--:-- 0:00:01 1572
- /tmp/log
<!DOCTYPE html>...
/tmp/debug 是完美的,这正是我想要执行的,如果我复制并粘贴它就可以了。然而,错误表明“a”和“test”被拆分为 2,并且 curl 尝试将“test”作为 url。这是我不明白的
我尝试了很多不同的东西:$、$@、"$"、"*@",各种放置单引号和双引号的方法,所以经过数小时的努力,我呼吁你的帮助 !!!非常感谢
【问题讨论】:
-
我看不出你是如何在调试中得到
http://google.com的 -
由于您的示例中从未出现“google.com”,因此调试/日志输出与您显示的输入不对应。不可能知道输入的其余部分是否对应,但我对此表示怀疑,因为该示例应该以不同的方式失败。输出看起来像是来自
CallAndLog curl --data '"'query=$val'"' http://google.com -
@glennjackman 我不认为这是重复的,因为 $@ 或 $* 和引号有些可疑。 url 编码可能是一种绕过那里的方法,但我不知道它为什么会失败
标签: bash curl double-quotes