2009-08-11 13 views
1

iは、次の行を持っています。私はrootとしてシェルスクリプトを実行する必要があるので、sudo filename.shとして実行するので、$ USERはその場合は自分のパスにrootになります。シェルスクリプトと私のシェルスクリプトではsudo

スクリプトを実行しているユーザーのもの、つまりルートの代わりにmikeにしたいと考えています。これを達成する方法はありますか?

はあなたが

答えて

5

あなたが/home/$USERを使用するを持っているくださいありがとう、または$HOMEは、トリックを行いますか! IIRCのsudoは、$HOMEの値を上書きしません。

+1

はい、sudo echo $ HOMEはrootホームではないユーザーホームを表示します – neuro

0

あなたがsu代わりのsudoを使用して喜んでいる場合は、ご使​​用の環境を維持しながらコマンドを実行するために

su -cp filename.sh 

を行うことができます。

+2

su?あなたのパスワードの代わりにrootのパスワードが必要なので、それはうんざりです。 –

+0

suを使ってsuを実行していない場合 – smcameron

0

$ UIDを使用してみることもできます。$ UIDは、ユーザーの実際のID番号に設定し、それに基づいてパスワードデータベースから名前を取得する必要があります。

+0

豚全体を調べて、ホームディレクトリをパスワードデータベースから取得することをお勧めします。 HOME = $(getent passwd $ SUDO_UID | cut -d:-f6) –

+0

はい。 $ HOMEを使用する方が簡単です:) – neuro

0

環境を保護する必要がある場合は、sudoの-Eオプションを使用できます。しかし、いくつかの構成とセキュリティの政治が必要です... Chris JYによって提案された$ HOMEソリューションがより簡単なものとして適用されない場合に適用されます。

私の2セント

1

使用$SUDO_USER(あなたが直接$USERを使う、という場合示すように、その値を設定):

$ cat script.sh 
#!/bin/bash 

if [ "$SUDO_USER" != "" ]; then 
    USER=$SUDO_USER; 
fi 

export PATH=$PATH:/home/$USER/somedir 

またはスクリプト(エラーチェックの最初のパラメータとして$USERを使用してごまかしますその後

$ cat script.sh 
#!/bin/bash 
USER=$1 

export PATH=$PATH:/home/$USER/somedir 

012読者の練習)があります
$ sudo ./script.sh $USER 

または、$HOMEをChris Jester-Youngの提案に従って使用してください。あなたは "/ home /"プレフィックスを削除するためにbashを使うことができますが、それは醜いハックになります。

0

sudoは「ルート」ユーザーとは異なります。 sudo特権を持っているユーザーがあれば、そのユーザーは "root"というユーザーが使用できる管理者権限を持っていることを意味します。つまり、sudoを使用しても、ユーザーはrootに変更されません。

関連する問題