小编g4s*_*4s8的帖子

在 Ctrl+C 上从 bash 脚本中断子进程

我正在从 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)。但是当我停止它时,子进程不会被中断。我怎样才能用主脚本完全杀死它们?

linux bash process interrupt

6
推荐指数
1
解决办法
1654
查看次数

如果命令失败,则失败脚本,但无论如何都要运行所有命令

我需要运行的脚本中有一些命令,它是源代码的自定义 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)

但它看起来过于复杂并且不可扩展(我需要添加额外的变量并检查下一个命令)。

有没有可能让这个脚本更优雅?

bash exit-status

0
推荐指数
1
解决办法
232
查看次数

标签 统计

bash ×2

exit-status ×1

interrupt ×1

linux ×1

process ×1