Bash版本:GNU bash,版本4.1.2(1)-发行版(x86_64-redhat-linux-gnu)
这工作正常:
#!/bin/bash
exec /usr/local/bin/python2.7 /app/add_container_host.py $@
但是我需要以特定用户身份运行它,因此我将其更改为:
#!/bin/bash
su -c '/usr/local/bin/python2.7 /app/add_container_host.py $@' $USER
并且Python脚本不再获取参数。
我试着改变单引号以双引号,这就是供应$@
到su -c
本身,而不是到Python脚本。
有没有办法以$@
运行方式传递给python脚本su -c
?
您的问题是您正在使用的引号。您需要使用双引号使内的变量$@
可以扩展,否则它们将保持原义,并且永远不会扩展。
$ cat runme.bash
#!/bin/bash
echo "run with double quotes"
su -c "echo $@" user1
echo "run with single quotes"
su -c 'echo $@' user1
$ ./runme.bash "a b c"
run with double quotes
a b c
run with single quotes
$
您还必须将参数列表作为带引号的列表传递,否则su -c ...
命令会感到困惑,并开始尝试将第二个参数解析为您要用作的用户su
。
$ ./runme.bash a b c
run with double quotes
su: user b does not exist
run with single quotes
$
如果您想查看脚本的实际作用,可以-x
切换到来运行它bash
。
$ bash -x ./runme.bash a b c
+ echo 'run with double quotes'
run with double quotes
+ su -c 'echo a' b c user1
su: user b does not exist
+ echo 'run with single quotes'
run with single quotes
+ su -c 'echo $@' user1
$
引用引数
$ bash -x ./runme.bash "a b c"
+ echo 'run with double quotes'
run with double quotes
+ su -c 'echo a b c' user1
a b c
+ echo 'run with single quotes'
run with single quotes
+ su -c 'echo $@' user1
$
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句