コマンドを実行した場合。
sudo some-command && some-other-command
2番目のコマンドsudo
もprevilege で実行されていますか?
コマンドを実行した場合。
sudo some-command && some-other-command
2番目のコマンドsudo
もprevilege で実行されていますか?
回答:
TL; DR:いいえ
最初のコマンドは
sudo some-command
2番目のコマンドは
some-other-command
このコマンドsudo
は次のコマンドを受け取り、昇格された特権で実行します。&&
しかし、コマンドに属していないと、最初のコマンドを実行する前に、シェルによって解釈されます。最初に最初のコマンドを実行し、成功すると2番目のコマンドを実行するようにbashに指示します。
だから、sudo
について知りません&& some-other command
。昇格されたプロセスが終了すると、bashは戻り値を取得してから、他のコマンドを実行しますが、このコマンドも最初のコマンドを認識しません。
これは簡単に実証できます。
$ sudo whoami && whoami
root
username
必要なものに到達するには、昇格したbashを開始し、両方のコマンドを実行させます。
$ sudo bash -c 'whoami && whoami'
root
root
したがって、上記のプロセス全体が昇格プロセスで実行されるため、両方のコマンドがルートとして実行されます。つまり、このコマンドで開始されたbashセッションは終了後すぐに終了します。それでも、両方whoami
はお互いの存在を知りません。
これはどんな目的にも適合しませんが、このデモンストレーションでは、より簡単な方法は単に
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 -s -- whoami && whoami
与えるroot
username
sudo -s -- "whoami && whoami"
commandが見つかりませんでしたが、commandとほぼ同じ"whoami && whoami"
です。この構成を&&で使用する方法は?とは sudo -s cd ..
対照的に、エラーは発生しませんsudo cd ..
。
sudo bash <<"EOF"
!ありがとう!:
コマンドラインで、
$ 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
whoami
例では+1 。