题
在我shell script(bash)我想呼吁其他外壳脚本。
我跑我的剧本作为user_A.这些脚本需要特别处理:
- 它已被作为不同用户运行 (user_B).密码在这里需要。
- 它是互动的,但不是唯一的要求 的问题,但是运行的另一个脚本 另一名用户(user_C)使用 su。我需要输入密码在这里 为好。
我可以用苏打这个电脚本,但它问题有待回答。我不能进入任何东西,因为它打印的每个questons"stty::不是一个打字机"
我要特别的脚本,这种方式
su user_B << ABC
...
special_script
...
ABC
解决方案
#!/bin/bash
main_for_root(){
:
}
# ------------------------------------------------------------------------------
abs_path="$(readlink -f `dirname $0`)/$(basename $0)"
# if [ `id -u` != 0 ] ; then
if [ `whoami` != 'root' ] ; then
echo "[su -] run as root"
su -c"/bin/bash $abs_path $@"
exit 0
else
main_for_root $@
fi
它适用于1个用户,因此现在增加,如果...'为第二个户
其他提示
另一个选项,用于运行的脚本,作为其他用户是'命令'的命令,认为它是'超级用户的做:'为便于阅读,目的。-U参数提供用户名的信息。所以:
sudo -u user_B special_script
将提供的密码user_B.我从来没有一个问题与正在运行的互动节目的使用它。你可以管理谁可以命令向其通过visudo命令。
你可以使用sudo,并创建一个sudoers文件,该文件允许user_A运行的脚本user_B.
线路,如:
user_A ALL = (user_B) NOPASSWD: /usr/share/stuff/ABC
将允许user_A做喜欢的东西
sudo -u user_B /usr/share/stuff/ABC
没有要求一个密码
su
试图获得一个密码从终端,并需要一个讯设备,因此它可以呼叫 ioctl
关掉关键的呼应。由于标准输入来自"here document"(ABC),试图呼叫的读写文件的描述符0yields"不tty".
如果你必须使用一个在这里的文件而不是一个 善意 脚本,这样做:
cat > /tmp/myscript.$$ <<ABC
#!/bin/sh
...
ABC
chmod +x /tmp/myscript.$$
sudo -u user_B /tmp/myscript.$$
你可能想要使用 expect
.其设计用于编写脚本的相互作用。
不隶属于 StackOverflow