将参数传递给 /bin/sh -c 时出现问题

将参数传递给 /bin/sh -c 时出现问题

我正在尝试使用/bin/sh -c日期参数执行 .sh 脚本。 -c 选项不是可选的,因为它是我的团队使用的框架。我无法将日期纪元参数正确传递给我的脚本。以下示例演示了调用文件如何导致参数不起作用,而直接传递命令却可以正常工作。中间的命令(不带 -c)是每个数字重复的预期输出。

root:xxxxx@xxxx:/opt/xxxxxx/software_versions> /bin/sh -c /opt/xxxxxx/software_versions/test2.sh 1 2 3 4
1
2
3
4
root:xxxxx@xxxx:/opt/xxxxxx/software_versions> /bin/sh  /opt/xxxxxx/software_versions/test2.sh 1 2 3 4
11
22
33
44
root:xxxxx@xxxxx:/opt/xxxxxx/software_versions> /bin/sh -c 'echo $1 echo $2' a b c d
b echo c

脚本内容:

echo 1$1
echo 2$2
echo 3$3
echo 4$4

答案1

如果你将它称为

software_versions> /bin/sh -c "/opt/xxxxxx/software_versions/test2.sh 1 2 3 4"

通过使用 -c,您可以调用子 shell 来运行其后面的命令。附加参数不会以任何可预测的方式传递到子 shell。您可以通过发送完整的字符串作为参数来解决这个问题。

相关内容