好吧,如果主题不清楚,我会解释我的疑问。我有一个shell脚本保存在我的本地用户(executeAdM.sh),当我执行这个脚本我连接到SUDO用户通过从指令file.But命令我执行这个脚本我也传递参数到这个脚本实际上是SUDO用户的一些目录path。 请参阅下面的脚本 – :
本地脚本(executeADM.sh) – :
#!/bin/bash echo password | sudo -S -l sudo /usr/bin/su - user <<\EOF #ls -lrt pwd for entry in $(ls -r) do if [ "$entry" = "testingADM.sh" ];then ./$entry $1 fi done EOF
以上执行 –
./executeADM.sh somePath
当上面的脚本执行它成功地连接到另一个用户,并在SUDO用户我执行一个for循环search另一个SCRIPT称为testingADM.sh。 一旦脚本被发现我执行该脚本与parameter passing从本地用户和testingADM.sh应该为我设置的path不工作它不读取从本地用户传递的参数。可以帮助我在这里我没有得到如何解决这个问题 请问我是否有什么不清楚基本上我想从LOCAL shell脚本传递参数到SUDO USERshell脚本 – :
SUDO用户脚本(testingADM.sh) – :
#!/bin/bash path=$1 cd $path pwd
如果我在硬编码pathvariables值保存在SUDO脚本中的所有工作正常。 但我不想那样。
#!/bin/bash path=somepath cd $path pwd
你有比你想象的更多的问题。 首先,你可以传递一个参数给一个sudo'ed脚本没有问题:
[me@nagios ~]$ cat parent.sh #!/bin/bash echo parent has $1 $2 sudo ./child.sh $1 $2 [me@nagios ~]$ cat child.sh #!/bin/bash echo child has $1 $2 [me@nagios ~]$ ./parent.sh a1 b2 c3 parent has a1 b2 child has a1 b2
你的问题是你正在使用一个here文件 ( <<EOF ),它不是一个允许以简单的方式传递参数的机制:重写一个脚本调用另一个脚本,你应该没问题。
你也正在循环ls的输出,正如很多人在这里注意到的那样是一个可怕的想法,只要你得到一个足够不寻常的文件名就会中断。 只需在调用之前testingtestingADM.sh的存在(或者更好的方法是使用[ -x ))。
基本上,你自己写了一个XY问题 :一旦你停止以错误的方式做事情,你的许多问题就会消失。