2017-10-01 11 views
0

root権限を持つスクリプトで自分のユーザアカウントからコマンドを実行する方法を理解しようとしています。私はこのテストスクリプトを持っており、出力は私を混乱させています。rootとして実行されたスクリプトのsuコマンドが矛盾しているようです

〜$猫test.sh

出力

#!/usr/bin/bash 
su -c "whoami" user 
su -c "echo $HOME" user 

〜$ sudoを./test.sh

出力

user 
/root 

なぜ最初の 'su'コマンドeemは 'user'として実行されますが、2番目は 'root'として実行されるようです。

+0

Stack Overflowは、プログラミングおよび開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 – jww

+0

[他のユーザーが実行するコマンドへの引数の受け渡し](https://unix.stackexchange.com/q/156343/56041)、[Bashの$(コマンド置換)のクォート](https:// unix。 stackexchange.com/q/118433/56041)[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)にあります。 [Super User](http://superuser.com/)などの[コマンドで引用符を含むBash変数(文字列)を使用するにはどうすればよいですか?](https://superuser.com/q/360966/173513) 、 – jww

答えて

1

二重引用符はシェル変数を展開します。お試しください。

echo su -c "echo $HOME" user 

これは、ルートとして実行される$HOMEを展開するスクリプトを実行しているシェルです(sudo ./test.shから)。だから実行されるのはsu -c 'echo /root' userです。

あなたは私たちがsu -cに展開されていないecho $HOMEを渡すここ

su -c 'echo $HOME' user 

をしたいです。

関連する問題