如果 bash 命令成功或失败,我如何让整个 bash 脚本退出(包括后台进程)?

How do I get entire bash script to exit (including backgrounded processes) if a bash command succeeds or fails?

我有以下 bash 脚本。我要运行三个命令

  1. 第一个命令启动一个前端 Web 服务器,我想将其作为后台。
  2. 第二个命令启动后端 Web 服务器,我想将其作为后台。
  3. 第三个命令运行是一个测试网络应用程序的 npm 脚本。

如果测试不成功,第三个命令将退出并显示错误代码。

如果第三条命令以错误结束,我如何让我的整个 bash 脚本以错误代码退出?如果第三条命令没有错误地完成,我希望我的 bash 脚本以 0 错误代码退出。

以下是我的尝试(脚本没有按预期运行)。我的意图是让所有后台进程在 npm run my-special-command 之后结束。如果 npm run my-special-command 导致错误代码,我希望我的脚本以该错误代码退出。否则,我希望我的脚本以 0 错误代码退出。

#!/bin/bash
history-server dist -p 8080 &
nodemon server &
npm run my-special-command || exit 1
exit 0

您可以使用命令替换:

# save PID of background process
history-server dist -p 8080 &
history_server_pid=$!

# if command succeds exit 0; else terminate background process and exit 1 
if [ $(npm run my-special-command 2>/dev/null) ]; then
    exit 0
else
    kill $history_server_pid
    exit 1
fi

如果命令成功,脚本将退出,状态为 0,否则为 1。