我正在从 bash 脚本启动两个子进程并使用wait
命令等待两者完成:
./proc1 &
pid1=$!
echo "started proc1: ${pid1}"
./proc2 &
pid2=$!
echo "started proc2: ${pid2}"
echo -n "working..."
wait $pid1 $pid2
echo " done"
Run Code Online (Sandbox Code Playgroud)
这个脚本在正常情况下工作正常:它等待两个进程完成并在它之后退出。但有时我需要停止这个脚本(使用Ctrl+C
)。但是当我停止它时,子进程不会被中断。我怎样才能用主脚本完全杀死它们?
我需要运行的脚本中有一些命令,它是源代码的自定义 linter。每次运行都会生成一个报告,并在违反规则的情况下以退出代码 1 失败。我需要在失败之前运行所有命令以生成报告,如果任何命令失败且退出代码为非零,则失败。此脚本不起作用,因为它在第一个错误时存在:
lint ./module1/src/main/java && lint ./module2/src/main/java && lint module3/src/main/java
Run Code Online (Sandbox Code Playgroud)
现在我正在使用这个脚本:
lint ./module1/src/main/java
code1="$?"
lint ./module2/src/main/java
code2="$?"
lint ./module3/src/main/java
code3="$?"
if [[ "$code1" != "0" || "$code2" != "0" || "$code3" != "0" ]]; then
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
但它看起来过于复杂并且不可扩展(我需要添加额外的变量并检查下一个命令)。
有没有可能让这个脚本更优雅?