質問: suオプション-別のユーザーとしてコマンドを実行 スクリプトから別のユーザーとしてコマンドを実行する方法を考えていました。スクリプトの所有者をrootに設定しています。また、スクリプト内で次のコマンドを実行して、hudsonユーザーとしてコマンドを実行しています。su -c command hudson これは正しい構文ですか?
回答: はい。 --helpは次のとおりです:$ su --help usage: su [options] [login] options: -c, --command command pass command to the invoked shell -h, --help display this help message and exit -, -l, --login make the shell a login shell -m, -p, --preserve-environment do not reset environment variables, and keep the same shell -s, --shell shell use shell instead of the default in passwd いくつかのテスト(sudoアカウントのパスワードがわからないため、nobodyを使用しました)$ sudo su -c whoami nobody [sudo] password for oli: nobody コマンドが引数を取る場合、引用符で囲む必要があります。そうしないと、奇妙なことが起こります。ここでは、ルートとして/ home/oliにディレクトリを作成しようとしています(oliとして)なしコマンド全体を引用しています。# su -c mkdir /home/oli/java oli no passwd entry for user '/home/oli/java' これは、mkdirを-cフラグの値として読み取るだけで、/home/oli/javaをユーザー名として使用しようとしています。引用すると、うまくいきます。# su -c "mkdir /home/oli/java" oli # stat /home/oli/java file: ‘/home/oli/java’ size: 4096 blocks: 8 io block: 4096 directory device: 811h/2065d inode: 5817025 links: 2 access: (0775/drwxrwxr-x) uid: ( 1000/ oli) gid: ( 1000/ oli) access: 2016-02-16 10:49:15.467375905 +0000 modify: 2016-02-16 10:49:15.467375905 +0000 change: 2016-02-16 10:49:15.467375905 +0000 birth: -