2013-07-29 11 views
9

異なる権限でカスタムbash関数を実行することは可能でしょうか?異なるユーザーのbash run関数

#!/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 

それはpossibileだろうか?

+1

@hetepeperfanです:あなたがそれを行うことはできませんショーをしよう*そのように*。何らかの形で別のユーザーとして単一の機能を実行できないことを示していません。 –

答えて

5

あなたは、少なくとも直接行うことはできません。

プロセスは、特定のユーザーアカウントで実行されます。デフォルトでは、それはそれを呼び出したプロセスと同じアカウントです。 sudoは、あるアカウントで実行中のプロセスが、別のアカウントで実行される別のプロセスを起動することを可能にします。

シェル関数を呼び出すと、新しいプロセスが起動されません。いくつかの変更を使用すると、スクリプトはあなたのような何かを与える必要があります。

sudoによって作成された新しいプロセスで
sudo: RunStefano: command not found 

を、何のRunStefanoコマンドはありません。この関数はスクリプトを実行しているプロセスに対してローカルです。

この機能を独立した実行可能スクリプトに分離する必要があります。 sudoでそのスクリプトを呼び出すことができます。

ところで、あなたはまた、バッククォートに/usr/bin/whoami周りにアポストロフィを変更する必要があります。

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

そして、あなたはsudoコマンドのドキュメントを読んでください。 -cオプションはありません。

+1

Ciao Keith。あなたの親切な答えに感謝します。あなたが提案しているように私は手続きします!再度、感謝します! –

13

はい、これが可能

#!/bin/bash 
function1(){ 
    echo `whoami` 
} 
export -f function1 
su username -c "bash -c function1" 
exit 0 
関連する問題