62130


`;` は command1 が終わってから command2 を実行

[code]

    command1 ; command2
    
[/code]

`&` を末尾につけたものは command1 の結果を待たずに command2 を実行だと思うのですが

[code]

    command1 &
    command2
    
[/code]

**疑問点:**

`&` や `&&` をコマンドの間に使う例を見かけたのですが、これらはどういう挙動をするのでしょうか。「`bash &`」
で検索してもバックグラウンド実行の記事しか出て来ないので、ご存知の方がいたら教えていただきたいです

[code]

    command1 & command2 
    command1 && command2
    
[/code]


CC BY-SA 4.0
2020-01-10T08:40:25.630
62129
2020-01-12T00:21:52.277
2020-01-11T07:18:37.297
3060
question
bash shellscript
複数コマンドを同一行で & や && で繋いだときの挙動を知りたい


`&&` は論理積で「左辺のコマンドが正常終了した場合のみ、右辺のコマンドを実行する」です。

よくある例は、`./configure` が成功した時のみ `make` を実行する、など。

[code]

    $ ./configure && make && make install
    
[/code]


CC BY-SA 4.0
2020-01-10T08:58:38.807
62130
2020-01-10T08:58:38.807
3060
62129
answer

[code]

    command1 & command2
    
[/code]

のほうは

[code]

    command1 &
    command2
    
[/code]

と同じ挙動になります。  
command1がバックグラウンド実行される結果、command1とcommand2が同時に実行されることになります。


CC BY-SA 4.0
2020-01-10T11:23:06.237
62134
2020-01-10T11:23:06.237
30745
62129
answer


# manマニュアルからの引用

`&`と`&&`とについて、[Man page of
BASH](https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html)からの引用です。  
`bash`のmanマニュアルに`&`、`&&`の振る舞いが比較的平易に説明されています。

[code]

    　コマンドが制御演算子 & で終わっている場合、シェルはコマンドをサブシェル内で 
    バックグラウンド (background) で実行します。
     シェルはコマンドが終了するのを待たずに、返却ステータス 0 を返します。
    　　略
    　AND リストと OR リストは、それぞれ制御演算子 && と || で区切られたパイプラインの並びです。
     AND リストと OR リストは左結合で実行されます。
     AND リストは
    
    command1 && command2
    
    という形式であり、 command1 が終了ステータス 0 を返した場合に限り command2 が実行されます。
    
[/code]

manマニュアルの表示は、以下のようにmanコマンドを実行するか、

[code]

    man bash
    
[/code]

ネットに接続されている環境では、`man bash`で検索すると大概は最初の方に[Man page of
BASH](https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html)がヒットします。

# その他

manマニュアルよりも`info`の方が情報量が多いです。

[code]

    info bash
    
[/code]

私の環境では日本語マニュアルをインストールしていないので、あまり利用したことはありません。


CC BY-SA 4.0
2020-01-11T13:24:04.020
62164
2020-01-12T00:21:52.277
2020-01-12T00:21:52.277
35558
35558
62129
answer