web-dev-qa-db-ja.com

どちらが良いですか:using;または&&を1行で複数のコマンドを実行するには?

チュートリアルとハウツーでは、よくコマンドが組み合わされています。例えば、

Sudo apt-get update && Sudo apt-get install pyrenamer

&&&||;の4つのコネクタが考えられます。 &コネクタは明確ですが(プロセスをバックグラウンドに送信し、ターミナルを使用可能のままにします)、&&;の違いは明確ではありません。そして、カヤのコメントまで||を知りませんでした。

次の質問では、2つのコネクタの違いを扱いますが、ほとんどはコメントで行います。

したがって、関連する質問がいくつかあります。

  1. ;&&の違いは何ですか?
  2. それぞれ使用する必要がある場合いくつかのユースケースを見るといいでしょう。コマンドを実行し、それからコンピューターをシャットダウンしたい場合、どのコネクターを選択する必要がありますか?
  3. 彼らの利点危険は何ですか? Robie Basak へのコメントで この回答 は、たとえばコマンドチェーンの最初の要素が失敗した場合、cd /somewhere_else; rm -Rf *のようなコマンドが破壊的な結果をもたらす可能性があることを述べています。
  4. 関連する場合、どこから来たのですか?
418
don.joey

カンニングペーパー:

A; B    # Run A and then B, regardless of success of A
A && B  # Run B if and only if A succeeded
A || B  # Run B if and only if A failed
A &     # Run A in background.
756
Jack

&&は、最初のコマンドがステータス0(成功)で終了した場合にのみ2番目のコマンドを実行します。 ;は、最初のコマンドがゼロ以外のステータスで終了した場合でも、両方のコマンドを実行します。

&&を使用した例は、次のように言い換えることができます。

if Sudo apt-get update ; then
    Sudo apt-get install pyrenamer
fi
77
choroba

;を使用すると、最初のコマンドが成功したかどうかに関係なく、コマンドが実行されます。

&&を使用すると、最初のコマンドが正常に実行された場合にのみ2番目のコマンドを実行します(ステータス0)。

両方とも異なる視点で使用されます。長いプロセスの場合と同様に、インストールの場合は、コンパイルしてインストールする必要があると言います。 make && make installする必要があります。したがって、インストールはmakeが成功した場合にのみ実行されます。

したがって、依存コマンドの場合は、&&を使用する必要があります

Wash bash、または独立したコマンドを持つコマンドは;を使用します

したがって、最初のジョブが失敗してもコンピューターをシャットダウンする場合は;を使用しますが、最初のジョブが完全に成功した場合はシャットダウンを開始します&&

31
Web-E

a ; bは、aの終了ステータスに関係なくbを実行します。 a && bは、成功した場合にのみbを実行します。

これは、最初の3つの質問に答えるのに必要かつ十分です。特に、2は広すぎて、「1つの」決定的な答えを与えることはできません-あなたの最善の策は、ケースバイケースで決定することです。

4番目の質問について: They're Bash syntax

どちらを使用しても本質的な危険はありません。繰り返しますが、上記の定義で十分です。 bが成功しなかった場合、aに意図しない効果がある場合、&&を記述することを意味します。これ以上のルールや説明は必要ありません、私見。

14
ignis