我设法在我正在处理的init脚本中跟踪完成了一个奇怪的问题.我在以下示例中简化了问题:
> set -x # <--- Make Bash show the commands it runs
> cmd="echo \"hello this is a test\""
+ cmd='echo "hello this is a test"'
> $cmd
+ echo '"hello' this is a 'test"' # <--- Where have the single quotes come from?
"hello this is a test"
Run Code Online (Sandbox Code Playgroud)
为什么bash将这些额外的单引号插入到执行的命令中?
额外的引号在上面的例子中没有引起任何问题,但它们真的让我头疼.
对于好奇,实际的问题代码是:
cmd="start-stop-daemon --start $DAEMON_OPTS \
--quiet \
--oknodo \
--background \
--make-pidfile \
$* \
--pidfile $CELERYD_PID_FILE
--exec /bin/su -- -c \"$CELERYD $CELERYD_OPTS\" - $CELERYD_USER"
Run Code Online (Sandbox Code Playgroud)
产生这个:
start-stop-daemon --start …Run Code Online (Sandbox Code Playgroud) 我想curl用多个标题发出请求.解决方案是创建此命令:
curl -H "keyheader: value" -H "2ndkeyheader: 2ndvalue" ...
Run Code Online (Sandbox Code Playgroud)
我的目标是只使用一个变量和所有标题,如:
headers='-H "keyheader: value" -H "2ndkeyheader: 2ndvalue" '
curl $headers
Run Code Online (Sandbox Code Playgroud)
发送
curl -H "keyheader: value" -H "2ndkeyheader: 2ndvalue"
Run Code Online (Sandbox Code Playgroud)
目前,问题是:我可以使用'或"声明我的字符串,但bash尝试运行之后"-H"作为参数然后回答:
command unknown
Run Code Online (Sandbox Code Playgroud)
想知道这里出了什么问题.
我正在尝试find从脚本构建和运行命令.但是我收到了一个非常神秘的错误信息find.以下基本总结了我如何构建命令行并运行它
$ xx="find . -name 'p*' -mmin +10 -exec echo {} \\;"
$ echo "$xx" #.....and I get the same print from echo $xx
find . -name 'p*' -mmin +10 -exec echo {} \;
$ $xx
find: missing argument to `-exec'
$ find . -name 'p*' -mmin +10 -exec echo {} \;
./p2.sh
./p1.sh
$ read xx
find . -name 'p*' -mmin +2 -exec echo {} \\;
$ $xx
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)
我被困住了,非常感谢你的帮助.我也想知道造成这种情况的原因.我在SLES上使用bash 3.2.51. …