複数のLinuxコマンドを1行にまとめてデプロイメント操作を実行しようとしています。例えば
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
ベストアンサー1
前のコマンドが成功した場合にのみ各コマンドを実行する場合は、&&
演算子を使用してそれらを組み合わせます。
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
いずれかのコマンドが失敗すると、それに続く他のすべてのコマンドは実行されません。
以前のコマンドが失敗したかどうかに関係なく、すべてのコマンドを実行する場合は、コマンドをセミコロンで区切ります。
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
あなたの場合、次のコマンドの実行が前のコマンドの成功に依存する最初のケースが必要だと思います。
すべてのコマンドをスクリプトに入れて、代わりにそれを実行することもできます。
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
行末のバックスラッシュは、シェルが次の行を新しいコマンドであると認識するのを防ぐためにあります。バックスラッシュを省略すると、コマンド全体を 1 行に記述する必要があります。
バックスラッシュをあらゆる場所で使うよりも便利な方法は、&&
いずれかのコマンドが失敗した場合にスクリプトを終了するようにシェルに指示することです。これは、引数set
付きの組み込み関数を使用して行います-e
。これにより、スクリプトをより自然な方法で記述できます。
#! /bin/sh
set -e
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
これをファイル(例myscript
: )に保存し、実行可能にします。
chmod +x myscript
これで、マシン上の他のプログラムと同様にそのスクリプトを実行できます。ただし、PATH
環境変数にリストされているディレクトリ ( /usr/local/bin
、または一部の Linux ディストリビューション など~/bin
) 内にスクリプトを配置しない場合は、そのスクリプトへのパスを指定する必要があります。現在のディレクトリにある場合は、次のように実行します。
./myscript
スクリプト内のコマンドは最初の例のコマンドと同じように動作します。次のコマンドは前のコマンドが成功した場合にのみ実行されます。すべてのコマンドを無条件に実行するには、単に を呼び出さないでくださいset -e
。
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install