2017-03-08 9 views
0

4つの.cプログラムをコンパイルして実行するスクリプトを作成しました。Bashスクリプト - プログラムが終了したことを知る方法

さて、私のスクリプトは以下の通りです:

#!/bin/sh 

echo "Compiling first program. . ." 
gcc -o first first.c 
echo "File compiled." 
echo 

echo "Compiling second program. . ." 
gcc -o second second.c 
echo "File compiled." 
echo 

echo "Compiling third program. . ." 
gcc -o third third.c 
echo "File compiled." 
echo 

echo "Compiling fourth program. . ." 
gcc -o fourth fourth.c 
echo "File compiled." 
echo 

./first 
./second 
./third 
./fourth 

すべての実行可能ファイルが一人で実行する必要があります。 質問は次のようなものです。execを起動すると、同時に実行されますか?次のプログラムを起動する前にプログラムが終了したときは、どうすればわかりますか?

+1

あなたの例では、シーケンスでそれらがランニングされています。したがって、すべてのプリオラムは、前回の終了後に実行されます。 (プログラムがフォークしない限り)。並列実行のためには、 '&'を使ってバックグランドに送るか、 'gnu parallel'や' xargs -P'などを使う必要があります。 – jm666

答えて

2

次の1が始まる前に、あなたが特に他にない機能を使用しない限り、完了しますbashスクリプト内の各コマンドは、そのような&など:

foo bar &    # starts `foo bar` to run "in the background" 
         # while the script proceeds 

または|

foo | bar    # runs `foo` and `bar` in parallel, with output 
         # from `foo` fed as input into `bar. (This is 
         # called a "pipeline", and is a very important 
         # concept for using Bash and similar shells.) 

こと言った、これはコマンドが完了したことを意味しません。場合によっては、gccコマンドの一部が失敗する可能性がありますが、他のプログラムは引き続き実行されます。それはおそらくあなたが望むものではありません。 のようなものをコマンドのそれぞれに追加することをお勧めします。つまり、失敗した場合(つまり、終了ステータスが0以外の場合)、スクリプトはエラーメッセージを出力して終了します。たとえば、次のように

gcc -o first first.c || { echo "Compilation failed." >&2 ; exit 1 ; } 

と:

./second || { echo "Second program failed." >&2 ; exit 1 ; } 

(あなたはまた、「機能」のロジックのこの種を置くことができますが、それはおそらく別の日のためのレッスンです!)

私はお勧めBashチュートリアルやthe Bash Reference Manualを読んで、シェルスクリプトのより良い扱い方を学んでください。

関連する問題