bash:执行su -c会破坏$ @

埃里昂

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在bash脚本中执行`sh -c`

添加GridTemplateColumn会破坏RadGrid

如何从C执行bash命令?

在'docker exec'命令中执行'bash -c'

C ++是否会破坏给定化合物中的对象?

为什么在bash脚本中添加睡眠似乎会破坏某些命名变量的变量递减?

使用free()会破坏C中的char数组数据

使用命令替换中的外部调用进行陷阱会破坏父Bash Shell

使用默认副本构造函数会破坏C ++中的树

list :: insert是否会破坏c ++中的迭代器?

使用本地HTML文件也会触发bash脚本执行

cron和su -c都无法执行我的工作的令人沮丧的问题(权限?)

返回外壳程序时,为什么将文件名传递到VIM会破坏bash?

gdrive会破坏密码吗?

如果按Ctrl + C,psql会破坏我的外壳

执行`bash -c`时如何获得颜色?

su的bash subshell命令执行顺序

如何从使用su -c在管道中执行的命令获取Perl中的STDERR

C语言编程。为什么函数指针会破坏优化

在bash脚本上使用curl参数,其中某些字符会破坏字符串

破坏执行

破坏_variant_t会导致断点(C ++)

su无法执行bin / bash / ****

在 readline/bash 中使用 vi 模式似乎会破坏历史搜索

从可运行的 jar 执行时,缺少 resolveStrategy 会破坏 DSL

Bash 脚本中的位置参数会破坏其他命令

在节点 Alpine 环境中,使用 LibreOffice 执行 pdf 转换会破坏除特殊字符和数字之外的所有内容

C++ MySQL 连接器执行存储过程破坏连接

C++:返回共享指针会破坏对象