可以运行具有不同权限的自定义bash函数吗?
#!/bin/bash
function RunStefano() {
while [ 1 ]; do
echo "Ciao, ´/usr/bin/whoami´"
sleep 10;
done &
}
export -f RunStefano;
echo "Welcome, ´/usr/bin/whoami´"
sudo -u stefano -c "RunStefano"
如果我使用'root'用户运行此脚本,我希望收到输出:
Welcome, root
Ciao, stefano
(...)
Ciao, stefano
可能吗?
答案 0 :(得分:21)
是的,这是可能的
#!/bin/bash
function1(){
echo `whoami`
}
export -f function1
su username -c "bash -c function1"
exit 0
答案 1 :(得分:7)
你不能这样做,至少不能直接做到。
每个进程在特定用户帐户下运行。默认情况下,该帐户与调用它的进程相同。 sudo
允许在一个帐户下运行的流程启动另一个在不同帐户下运行的流程。
调用shell函数时,它不会启动新进程。通过一些修改,您的脚本应该为您提供如下内容:
sudo: RunStefano: command not found
在sudo
创建的新流程中,没有RunStefano
命令;该函数是运行脚本的进程的本地函数。
您需要将该函数隔离到单独的可执行脚本中;然后,您可以通过sudo
调用该脚本。
顺便提一下,您还需要将/usr/bin/whoami
周围的撇号更改为反引号:
echo "Ciao, `/usr/bin/whoami`"
您应该阅读sudo
命令的文档;它没有-c
选项。