2012-10-25 12 views

答えて

515

あなたは&&演算子使用してそれらを組み合わせ、その後、前回の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 

を;あなたはバックスラッシュを省略した場合、あなたは、単一の行に全体のコマンドを記述する必要があります)その保存

ファイルに、たとえば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 
+8

+1です。 –

+2

+1。これはまさに私が探していたものです! –

+21

今後の読者の方へ:最後のコマンドが失敗した場合にのみ次のコマンドを実行したい場合は、セミコロンまたは '&&'の代わりに '||'を使用することもできます。試してみるのと同じように、失敗した場合は試してみてください。 – DeVadder

1
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install 
+0

OPスクリプトと同じではありません。説明してください:aaコマンドが失敗した場合、スクリプトは終了します –

+3

さらに、 'cmd1 || 'cmd1'がシェルに0以外のステータスを返した場合にのみ実行する' cmd2'が必要な場合は 'cmd2'セパレータを使用し、' cmd1;戻り値に関係なく両方のコマンドを実行する場合は、「cmd2」を使用します。 –

+0

@sputnickこれを貼り付けて、コマンドを&& –

9

のためにあなたはセミコロンを使用してコマンドを区切ることができます。

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 

あなたの場合、連続したコマンドの実行は前のコマンドに依存しているようですので、2番目の例を使用してください。e。コマンドを結合するには& &を使用してください。

36

私は、コマンドを区切るには、フォアグラウンドでしか動作しません。例えば:

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

括弧は、この解決使用して、無条件の実行に対応するために:

(cmd1; cmd2; cmd3) &は - 任意のステップが失敗しても、バックグラウンドでのコマンドのチェーンを実行します。

+1

例の末尾のアンパサンド(&)は意図的でしたか?もしそうなら、それは何のためですか? – Technophile

+4

@Technophileこれは、[バックグラウンドコマンド](http://unix.stackexchange.com/questions/103731/run-a-command-without-making-me-wait)を実行するのです –

+0

単純で短く直接的な答えの1つです。 StackExchangeウェブサイトをより頻繁に使用する必要がありますDean。あなたのご意見ありがとうございます。 – CPHPython

0

唯一のアンパサンドのユーティリティとは何ですか?

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

しかし、私が望むようには動作しません: 今朝、私は同時に2つのパスワードマネージャを起動する(Manjaro + XFCEに)XFCEパネルにランチャーを作りました。 IE、最初のアプリは起動しますが、第二開始は、前を閉じているときにのみ: -/

はしかし、私が発見した(唯一のアンパサンド付き):

sh -c "keepassx & password-gorilla" 

、それは私が今欲しいとして動作します。 ..

関連する問題