2012-03-11 41 views
0

如果我想在主脚本文件中以特定用户身份调用另一个shell脚本,我该如何去做呢?孩子的脚本似乎松散了它运行的用户的上下文,我还没有找到任何有用的子脚本技术。运行shell脚本作为父脚本的用户

例:war-install.sh

if [ ! -d /opt/tomcat/ ] 
then 
    ./tomcat-install-files/install.sh 
fi 

这里的问题是,如果我跑war-install.sh作为root或使用sudo命令,./tomcat-install-files/install.sh似乎失去了sudo/root的上下文。我该如何纠正这一点?

谢谢!

+0

它不应该(改变用户),除非子命令自己的setuid后:但一般以其他用户身份运行命令(如果shell脚本不好主意!)。是什么让你认为它失去了sudo用户? – torek 2012-03-11 04:28:15

+0

如果我运行命令“sudo ./tomcat-install-files/install.sh”,脚本运行良好。但是,如果我运行“sudo war-install.sh”,一旦它调用install.sh,我会得到一堆“权限被拒绝”错误。 – Roosh 2012-03-11 05:18:38

+0

以上是war-install.sh的全部内容吗?/opt/tomcat /是否作为目录存在?假设“否”(还有更多)和“否”(所以它到达./行)是“。”仍然指向那个地方的同一个地方? (在调用./tomcat-install-files/install.sh之前,尝试设置-x和/或在那里执行'pwd')。 – torek 2012-03-11 05:53:49

回答

0

我同意Roosh发生的奇怪事情。

sudo -l <user> <cmd>

+0

如果子脚本运行su命令,则全部执行脚本被暂停。 – Roosh 2012-03-11 05:19:45

+0

这应该是'sudo',而不是'su'('su'会打开一个交互式shell,这不是你想要的脚本)。 – 2012-03-11 11:11:46

+0

@MichałKosmulskiArg傻我的不好...修正! – Sandro 2012-03-11 16:59:13

0

尝试用空间点

if [ ! -d /opt/tomcat/ ] 
then 
    . /tomcat-install-files/install.sh 
fi