我需要.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 用户指南。