考虑这个sudo - 我以jonhnd身份登录并通过脚本run1st.ksh运行,该脚本具有以下命令
sudo -iu bigadmin
这会将我的凭据提升为bigadmin一般用户,但该用户是“共享”用户的意思 - 我真的没有任何余地来定制他的个人资料 登录后,我看到他的PATH变量非常瘦,只添加了几条路径
echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/opt/dell/srvadmin/bin
所以pwd不在路径中,也不可执行。 $ PATH中的那些目录中没有一个是可写的,就像我说修改bigadmin的任何个人文件都不是一种选择。我有一个启动脚本,我作为该用户执行我的会话,我必须强制执行它
. ./myscript
将起作用
myscript
. myscript
由于上面提到的路径限制,给myscript找不到错误是可以理解的。 我想要做的是在run1st.ksh中运行sudo和myscript,这样当我输入bigadmin提示时,myscript已经运行了 @barmar 谢谢你的帮助。 这是运行的o / p(在set -x上放置详细信息)
++ sudo -iu bigadmin ksh -c '. ./run1st.ksh'
Usage: . [ options ] name [arg ...]
@Barmar
sudo -iu bigadmin ksh -c '/home/bigadmin/run1st.ksh'
ksh: line 1: /home/bigadmin/run1st.ksh: not found
sudo -iu bigadmin ksh -c '. /home/biadmin/run1st.ksh'
age: . [ options ] name [arg ...]
$ sudo -iu bigadmin ksh -c '. /home/bigadmin; run1st.ksh'
+ sudo -iu bigadmin ksh -c '. /home/bigadmin; run1st.ksh'
Usage: . [ options ] name [arg ...]
$ sudo -iu bigadmin ksh -c '. /home/bigadmin/run1st.ksh ; run1st.ksh'
+ sudo -iu bigadmin ksh -c '. /home/bigadmin/run1st.ksh ; run1st.ksh'
Usage: . [ options ] name [arg ...]
不起作用
$ sudo -iu bigadmin /home/bigadmin/run1st.ksh
+ sudo -iu bigadmin /home/bigadmin/run1st.ksh
-nologin: line 1: /home/bigadmin/run1st.ksh: not found
它实际上在johnd的目录中查找run1st.ksh
$ sudo -iu bigadmin echo `pwd`
++ pwd
+ sudo -iu bigadmin echo /home/johnd
甚至在将它复制到johnd的家后 - 我得到了SAME File not found命令。所以它在特定的PATH中寻找文件,而不是在你提出的目录中。也许在那个sudo命令中调整PATH?
文件名xxx. ksh
中有一个我没注意到的空格。修复了现在它没有给文件找不到错误但它执行它并返回到johnd提示符。
$ sudo -iu bigadmin /home/bigadmin/run1st.ksh
+ sudo -iu bigadmin /home/bigadmin/run1st.ksh
++ printf '\033]0;%s@%s:%s\007' johnd server400 '~'
$
答案 0 :(得分:1)
你可以这样做:
sudo -iu bigadmin /path/to/myscript