为什么 sudo su 后传递给 .sh 文件的参数丢失了?

为什么 sudo su 后传递给 .sh 文件的参数丢失了?

我需要.sh从本地计算机在服务器上运行文件。我可以使用下面的命令来做到这一点。

ssh -p my_port_no -i path_to_key user@ip_address "bash -s" < testOnServer.sh

现在我需要使用上面的命令传递一些参数。我按照下面的方法做了,结果成功了。

ssh -p my_port_no -i path_to_key user@ip_address "bash -s" < testOnServer.sh testArg1

我的testOnServer.sh文件如下。

testArg1=$1

echo testArg1   # testArg1 can be seen here.
sudo su
echo testArg1 # testArg1 is missing here.

命令testArg1后缺少的值。sudo su

非常感谢任何帮助。

答案1

使用 sudo su 将 shell 更改为新用户,即 root。因此,这些变量在新 shell 中不可用。

要共享变量,您必须将它们发布到环境中,以供 root 访问。因此,在 sudo su 命令之后,值 testArg1 并未“丢失”...当您更改 shell 时,它不会被打印。

相反,如果必须的话,请编辑 sudoers 文件以允许您的用户直接运行您需要的命令。

请参阅以前的帖子,例如bash 脚本运行时阻止所有默认命令?,关于使用“源”等来控制变量访问。并阅读一些有关 Bash 变量范围的信息,例如。使用Bash 用户指南

相关内容