为什么在 sudo su 之后缺少传递给 .sh 文件的参数?

Sud*_*nda 0 sudo parameter shell-script arguments

我需要.sh从本地机器在我的服务器上运行文件。我可以使用以下命令来完成。

ssh -p my_port_no -i path_to_key user@ip_address "bash -s" < testOnServer.sh
Run Code Online (Sandbox Code Playgroud)

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

ssh -p my_port_no -i path_to_key user@ip_address "bash -s" < testOnServer.sh testArg1
Run Code Online (Sandbox Code Playgroud)

我的testOnServer.sh文件如下。

testArg1=$1

echo testArg1   # testArg1 can be seen here.
sudo su
echo testArg1 # testArg1 is missing here.
Run Code Online (Sandbox Code Playgroud)

命令testArg1后缺少的值sudo su

任何帮助都受到高度赞赏。

小智 6

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

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

而是编辑 sudoers 文件以允许您的用户直接运行您需要的命令(如果必须)。

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

  • 同样,`sudo` 通常被配置为丢弃任意环境变量,即即使普通的 `su` 继承了一个环境变量,`sudo su` 可能不会(尽管 `sudo -E su` 可能 - 如果政策允许的话) (3认同)