写脚本时如果用了临时目录,最后手动 rm -r 很容易因为中途报错被跳过。可以用 trap 挂到 EXIT,脚本正常结束或提前退出时都跑一次清理。
环境:bash 4+,Linux/macOS 常见环境可以试:
#!/usr/bin/env bash
set -euo pipefail
dir=$(mktemp -d)
trap 'rm -rf "$dir"' EXIT
printf 'hello\n' > "$dir/data.txt"
cat "$dir/data.txt"
# 这里就算后面某步失败,退出时也会清掉临时目录
如果想看效果明显一点,可以临时加一行:
echo "temp dir: $dir"
我一般会把 mktemp -d 和 trap 放得很近,免得目录建出来之后忘了兜底。要注意变量加引号,另外 rm -rf 里的路径最好只用 mktemp 生成的那个变量,别拼太复杂。