Bash脚本 - 如何知道程序已终止

时间:2017-03-08 17:19:06

标签: bash

我创建了一个编译然后执行4 .c程序的脚本。

现在,我的脚本如下:

#!/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

每个可执行文件都需要单独运行。 问题是:以这种方式启动高管,他们会同时执行吗?如何在启动以下程序之前知道程序何时终止?

1 个答案:

答案 0 :(得分:2)

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命令可能会失败,但其他程序仍然会运行。这可能不是你想要的。我建议在每个命令中添加类似|| { echo "Command failed." >&2 ; exit 1 ; }的内容,这样如果它们失败(意味着:如果它们返回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,以便更好地处理shell脚本。