web-dev-qa-db-ja.com

複数のLinuxコマンドを1行にまとめて実行する

デプロイメント操作を実行するために、複数のLinuxコマンドを1行にマージしようとしています。例えば

cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
297
d-man

前のコマンドが成功した場合にのみ各コマンドを実行したい場合は、&&演算子を使用してそれらを組み合わせます。

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

あなたの場合、次のコマンドの実行が前のコマンドの成功に依存する最初のケースがほしいと思います。

すべてのコマンドをスクリプトに記述して実行することもできます。

#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install

(シェルの次の行が新しいコマンドであるとシェルが考えないようにするために、行の終わりにバックスラッシュがあります。バックスラッシュを省略した場合は、コマンド全体を1行で書く必要があります。)

それをmyscriptなどのファイルに保存し、実行可能にします。

chmod +x myscript

これで、マシン上の他のプログラムと同じようにそのスクリプトを実行できます。しかし、あなたがそれをあなたのPATH環境変数にリストされたディレクトリの中に置かないなら(例えば、/usr/local/bin、またはいくつかのLinuxディストリビューション~/bin)、あなたはそのスクリプトへのパスを指定する必要があるでしょう。現在のディレクトリにある場合は、次のように実行します。

./myscript

スクリプト内のコマンドは、最初の例のコマンドと同じように機能します。次のコマンドは、前のコマンドが成功した場合にのみ実行されます。すべてのコマンドを無条件に実行するには、各コマンドをそれぞれ独自の行にリストします。

#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
663
Nikos C.

私はそれを使用していることがわかりました。コマンドを分離することはフォアグラウンドでのみ機能します。例:

cmd1; cmd2; cmd3 & - バックグラウンドでのみcmd3を実行しますが、エラーがない場合はcmd1 && cmd2 && cmd3 & - はバックグラウンドでチェーン全体を実行します。

無条件実行に対応するために、括弧を使用してこれを解決します。

(cmd1; cmd2; cmd3) & - いずれかのステップが失敗した場合でも、バックグラウンドで一連のコマンドを実行します。

42
Dean

セミコロンを使用してコマンドを区切ることができます。

cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install

それはあなたが言っていることでしたか?

10
andrux

それらを一度に実行するには、パイプラインキー "|"を使います。そのようです:

$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install
2
Kelly Poore

前のコマンドを実行するかどうかにかかわらず、すべてのコマンドを実行する場合は、セミコロン(;)を使用してコマンドを区切ることができます。

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

あなたの場合、連続したコマンドの実行は前のコマンドに依存しているように見えるので、2番目の例、すなわち&&を使ってコマンドを結合します。

2
Prabhu
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
1
Mark Stevens

唯一のアンパサンドの有用性は何ですか?今朝、私はXFCEパネル(Manjaro + XFCE)で2つのパスワードマネージャを同時に起動するためのランチャーを作りました。

sh -c "keepassx && password-gorilla"
or
sh -c "keepassx; password-gorilla"

しかし、それは私が望むようには機能しません。 I.E.、最初のアプリは起動しますが、2番目のアプリは前回のアプリが閉じているときにのみ起動します。 - /

しかし、私はそれを見つけました(1つのアンパサンドだけで):

sh -c "keepassx & password-gorilla"

そしてそれは私が今欲しい通りに動作します...

0
Nettlebay AP