コマンドを実行した場合。
Sudo some-command && some-other-command
2番目のコマンドもSudo
previlegeで実行されていますか?
TL; DR:NO
最初のコマンドは
Sudo some-command
2番目のコマンドは
some-other-command
コマンドSudo
は次のコマンドを受け取り、昇格した特権で実行します。ただし、&&
はコマンドに属しておらず、最初のコマンドを実行する前にシェルによって解釈されます。最初に最初のコマンドを実行し、成功すると2番目のコマンドを実行するようにbashに指示します。
したがって、Sudo
は&& some-other command
を認識しません。昇格されたプロセスが終了すると、bashは戻り値を取得してから、もう1つのコマンドを実行しますが、このコマンドも最初のコマンドを認識しません。
これは簡単に実証できます。
$ Sudo whoami && whoami
root
username
必要なものに到達するには、昇格したbashを開始し、両方のコマンドを実行させます。
$ Sudo bash -c 'whoami && whoami'
root
root
したがって、上記のプロセス全体が昇格されたプロセスで実行されるため、両方のコマンドがルートとして実行されます。つまり、このコマンドで開始されたbashセッションは終了後すぐに終了します。それでも、両方のwhoami
sはお互いの存在を知りません。
これはどんな目的にも適合しませんが、このデモンストレーションでは、より簡単な方法は単に
Sudo some-command && Sudo some-other-command
いいえ。これを行う例は次のとおりです。
Sudo some-command && Sudo some-other-command
Sudo sh -c "some-command && some-other-command"
または、コマンドをネストしたい場合は、次のこともできます。
Sudo bash <<"EOF"
some-command
some-other-command
Sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
いいえ、Sudoを2回記述するか、または
Sudo bash -c 'foo && bar'
&&
は、右側(2番目)のコマンドが、最小(最初)のコマンドが成功した場合にのみ実行されることを意味します。つまり、終了コード$?
は0
です。
2つのコマンドは互いに異なり、独自の環境で実行されるため、2番目のコマンドはSudo
特権を持って実行されません。
これにより明確になります。
$ Sudo whoami && whoami
root
foobar
いいえ、かつては非常に一般的にマクロ化されていました。
Sudo reboot && exit
ほぼすべての人が少なくともこれを行うべきだったonce
Sudo apt-get update && Sudo apt-get upgrade
したがって、これは素晴らしい「ミッキーマウス」インタビューの質問です。
これは非常に簡単にテストされるので、質問はstat paddingエクササイズの疑いがあるかもしれません。
コマンドラインで、
$ command one && command two
典型的な目的は、最初のコマンドが成功した場合にのみ&&に続くコマンドを実行することです。
絶対にいいえ、これは2つの連続したコマンドを書くのと同じです。この&&はコマンドに追加の特権を与えません。 単なるセパレーター。
それを証明するために、例を挙げましょう。
touch fileA fileB
2つのファイルfileAとfileBを作成しました。今、私はコマンドを実行します
Sudo chown test:test fileA && chown test:test fileB
これらのファイルのユーザーとグループの所有者をユーザーとグループ名のテストに変更しています。これで、最初のコマンドは実行されますが、他のコマンドはどうですか?
出力は次のとおりです。
chown: changing ownership of `fileB': Operation not permitted
したがって、コマンドはSudo
を必要とするため実行されませんでしたが、&&は2番目のSudo
の代わりではないと結論付けることができます