Bash:确保在使用set -euo pipefail时始终运行命令

问题描述 投票:0回答:2

我正在用Bash编写一个看起来像这样的脚本:

#!/usr/bin/env bash

# Stop the script if any commands fail
set -euo pipefail

# Start a server
yarn serve &
SERVER_PID=$!

# Run some cURL requests against the server
...

# Stop the server
kill $SERVER_PID

我想要做的是确保在脚本结束时始终调用kill $SERVER_PID,即使其中一个服务器命令失败也是如此。有没有办法在Bash中实现这一目标?

bash
2个回答
2
投票

插入

trap "kill $SERVER_PID" ERR

SERVER_PID=$!之后的新线。

来自help trap

ERR表示每次命令失败都会导致shell在启用-e选项时退出时执行ARG。


4
投票
#!/usr/bin/env bash

# Stop the script if any commands fail
set -euo pipefail

# Start a server
yarn serve &
SERVER_PID=$!

trap "kill $SERVER_PID" 0 1 2 3 15

# Run some cURL requests against the server
...

注意使用trap

© www.soinside.com 2019 - 2024. All rights reserved.