Sudo
でコマンドを実行することとSudoでbashスクリプトを実行することは同じだといつも思っていました。しかし、今日、私はそれらが異なっていることに気づきました。これが私がテストしたものです:
me@my_machine:~$ Sudo echo $(whoami)
ターミナルからコマンドを実行し、出力を取得します:me
。このリンクを読んだ後: https://superuser.com/questions/384544/why-does-Sudo-u-root-echo-whoami-not-return-root 、私はこれを理解しています。
次に、test.sh
という名前のbashスクリプトを作成します。
#!/usr/bin/env bash
echo $(whoami)
そして、次のスクリプトを実行します:Sudo ./test.sh
、驚いたことに、出力は次のようになります:root
。
では、Sudo
を使用してコマンドを実行することと、Sudo
を使用してBashスクリプトを実行することは異なりますか?
コマンドs
を含むwhoami
Bashスクリプトがある場合、それをSudo
で実行しますか?me
の代わりにroot
を取得するにはどうすればよいですか?
シェルがコマンドを実行するため
_Sudo echo $(whoami)
_
最初に、Sudo
を呼び出す引数を把握する必要があります。 echo
は単純な文字列であるため、シェルはそれに対して何もしませんが、$(whoami)
は展開する必要のあるコマンド置換です。これは、whoami
を実行し、コマンド置換をその出力に置き換えることによって行われます。これで、Sudo
を呼び出す準備が整いました。
これは、Sudo
がecho
と、whoami
の出力(非特権ユーザーとして実行された)を引数として実行されることを意味します。
whoami
withSudo
を実行する場合は、スクリプトに入れて、Sudo
を使用してスクリプトを実行できます。 、または使用できます
_Sudo sh -c 'echo "$(whoami)"'
_
ここでは、_sh -c
_スクリプトがrootとして実行されるため、whoami
もrootとして実行されます。
ポイントは、whoami
を実行するシェルがrootユーザーとして実行されていることです。
最初のコマンドSudo echo $(whoami)
でwhoami
を実行するシェルは、rootではなく通常のユーザーとして実行されます。