複数のターミナルコマンドを順番に実行する時につける「&&」と「;」と「||」の違い
当ブログでdefaultsコマンド(普通の操作では変更できないMacの設定を変えられるコマンド)を紹介する時に、「;(セミコロン)」がよく出てきますが、いまいち理解しきれていなかったので調べなおしてみました。
- コマンドとコマンドの間に「&&」もしくは「;」をつけると複数のコマンドを順番に実行できる
- 「;」は他のコマンドの実行結果に依存せず順番に実行される
- 「&&」はエラーが出た場合、後続コマンドを実行しない
- 「||」はエラーが出た場合、後続コマンドを実行する
例えば
hoge ; date
というコマンドを実行した場合、「hoge」という存在しないコマンドを実行したのでエラーが出ますが、後続の「date」コマンドは実行されます。
同じように
hoge && date
というコマンドを実行した場合、「hoge」でエラーが出ているので後続のdateコマンドは実行されません。
hoge || date
というコマンドを実行した場合、前述の「;」の時と同じ結果になりますが本質は違い、エラーを起こした時にしか後続コマンドは実行されませんので、
cd || date
というコマンドを実行すると「cd」コマンドは正常に実行されるので後続の「date」コマンドは実行されません。
以上のことから「defaults」コマンドを実行した後に「killall Dock」でDockを再起動するという定番の記述には「;」ではなく「&&」を利用した方が良さそうです。
Contents