トップ > Linuxらしい使い方を覚える >
複数のコマンドを順に実行する

  

複数コマンドを連続して実行するには

またまたシェルに関する機能の解説です。 ここで紹介するのは、複数のコマンドを順に実行する方法です。 順に実行する、といってもパイプラインのようにコマンド間での情報の受け渡しは行いません

複数のコマンドを連続して実行させるには3通りの方法があります。 1つ目は command1 を実行した後に command2 を実行するという方法で、

command1 ; command2

のように記述します。 command1 の実行結果に関わらず command2 が実行されます。

2つ目は command1 を実行してエラーが発生しなければ command2 を実行するという方法で、

command1 && command2

と記述します。 command1 の実行結果がエラーとなった場合には command2 は実行されません。

3つ目は command1 を実行してエラー発生した場合のみ command2 を実行するという方法で、

command1 || command2

と記述します。 command1 の実行結果がエラーでなかった場合には command2 は実行されません。


では、実際にやってみましょう。 端末を開き、キーボードから cd ; cd Documents ; ls と入力して、Enterキーを押してください。


cd ; cd Documents ; ls

 
  
先頭の cd コマンドはホームディレクトリに戻るためのものです。

以下のようにホームディレクトリの下の Documents ディレクトリの内容が表示されます。

taro@myhostname:~$ cd ; cd Documents ; ls
対象のファイル.txt
taro@myhostname:~/Documents$

では次に、存在しないディレクトリに移動して ls コマンドを実行してみましょう。

キーボードから cd ; cd NotFound ; ls と入力して、Enterキーを押してください。


cd ; cd NotFound ; ls

 

以下のようにエラーメッセージが表示され、ホームディレクトリの内容が表示されます。

taro@myhostname:~/Documents$ cd ; cd NotFound ; ls
-bash: cd: NotFound: そのようなファイルやディレクトリはありません
Desktop    Downloads  Pictures  Templates  filename  stdout
Documents  Music      Public    Videos     stderr    testfile
taro@myhostname:~$

このようにディレクトリへの移動に失敗しても、次のコマンドが実行されています。 そのため、ホームディレクトリの内容が表示されてしまいました。

では次に、ディレクトリへの移動が成功した場合のみ ls コマンドを実行し、移動できなかった場合には "Error" というメッセージを表示するように修正してみましょう。

キーボードから cd ; cd Documents && ls || echo Error と入力して、Enterキーを押してください。


cd ; cd Documents && ls || echo Error

 
  
このように ; と && と || を組み合わせることができます。

以下のようにホームディレクトリの下の Documents ディレクトリの内容が表示されます。 狙い通りの動きです。

taro@myhostname:~$ cd ; cd Documents && ls || echo Error
対象のファイル.txt
taro@myhostname:~/Documents$

続いては、ディレクトリへの移動がエラーとなる場合です。 キーボードから cd ; cd NotFound && ls || echo Error と入力して、Enterキーを押してください。


cd ; cd NotFound && ls || echo Error

 

以下のように cd コマンドが表示しているエラーメッセージに続き、"Error" という独自のメッセージも表示されています。 ls コマンドは実行されていません、成功です。

taro@myhostname:~/Documents$ cd ; cd NotFound && ls || echo Error
-bash: cd: NotFound: そのようなファイルやディレクトリはありません
Error
taro@myhostname:~$
  
  

まとめ

シェルでは、一度のコマンドライン入力で複数のコマンドを連続して実行させることができます。 なお、パイプラインのようにコマンド間での情報の受け渡しは行われません。

複数のコマンドを連続して実行させるには3通りの方法があり、

command1 ; command2

のように記述すると、command1 の実行結果に関わらず command2 が実行されます。

command1 を実行してエラーが発生しなければ command2 を実行させる場合には、

command1 && command2

と記述します。

command1 を実行してエラー発生した場合のみ command2 を実行させたい場合には、

command1 || command2

と記述します。

これらを組み合わせ、

command1 ; command2 && command-if-success || command-if-error

と記述することもできます。

メニュー