我创建了一个编译然后执行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
每个可执行文件都需要单独运行。 问题是:以这种方式启动高管,他们会同时执行吗?如何在启动以下程序之前知道程序何时终止?
答案 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脚本。