14

是否可以运行具有不同权限的自定义 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

有可能吗?

4

2 回答 2

31

是的,这是可能的

#!/bin/bash
function1(){
   echo `whoami` 
}
export -f function1
su username -c "bash -c function1"
exit 0
于 2014-05-19T09:03:22.223 回答
6

你不能这样做,至少不能直接这样做。(但请参阅理查德弗莱彻的回答。)

每个进程都在特定的用户帐户下运行。默认情况下,该帐户与调用它的进程相同。sudo允许在一个帐户下运行的进程启动另一个在不同帐户下运行的进程。

当您调用 shell 函数时,它不会启动新进程。通过一些修改,您的脚本应该为您提供如下内容:

sudo: RunStefano: command not found

在创建的新进程中sudo,没有RunStefano命令;该函数是运行脚本的进程的本地函数。

您需要将函数隔离到一个单独的可执行脚本中;然后,您可以通过调用该脚本sudo

顺便说一句,您还需要将撇号/usr/bin/whoami改为反引号:

echo "Ciao, `/usr/bin/whoami`"

您应该阅读该sudo命令的文档;它没有-c选择。

于 2013-07-29T14:54:24.870 回答