如何使用 trap 命令

Trap bae 陷阱妹 衣服穿的黑 隱眼都戴極光灰 — 〖陷阱妹〗 by 屁孩 Ryan

trap 命令在命令行中用來捕捉和處理信號。它允許你在收到特定信號時執行特定的命令或腳本,這在清理資源、處理中斷或其他異常情況時非常有用。以下是一些例子:

基本用法

捕捉 SIGINT (通常是 Ctrl+C 發出的中斷信號):

#!/bin/bash
 
trap "echo 'Script interrupted! Cleaning up...'; exit" SIGINT
 
# 模擬長時間運行的腳本
echo "Running script... Press Ctrl+C to interrupt."
while true; do
  sleep 1
done

在這個例子中,當用戶按下 Ctrl+C 時,腳本將打印 “Script interrupted! Cleaning up…” 然後退出。

捕捉退出信號 (EXIT)

捕捉腳本退出信號來進行清理操作:

#!/bin/bash
 
trap "echo 'Cleaning up before exit...'" EXIT
 
# 模擬腳本工作
echo "Doing some work..."
sleep 5
echo "Work done."

在這個例子中,無論腳本如何退出,都會執行 echo 'Cleaning up before exit...'

捕捉多個信號

你可以捕捉多個信號並為每個信號設置不同的處理程序:

#!/bin/bash
 
trap "echo 'Caught SIGINT'; exit" SIGINT
trap "echo 'Caught SIGTERM'; exit" SIGTERM
 
# 模擬長時間運行的腳本
echo "Running script... Send SIGINT or SIGTERM to interrupt."
while true; do
  sleep 1
done

這個腳本會捕捉 SIGINTSIGTERM 信號並根據不同的信號執行不同的命令。

清理臨時文件

一個實用的例子,當腳本退出時自動刪除臨時文件:

#!/bin/bash
 
tmpfile=$(mktemp)
echo "Temporary file created at: $tmpfile"
 
trap "rm -f $tmpfile; echo 'Temporary file deleted.'" EXIT
 
# 模擬腳本工作
echo "Doing some work and writing to temp file..."
echo "Some data" > $tmpfile
sleep 5
echo "Work done."

在這個例子中,腳本會在退出時自動刪除臨時文件,確保不會留下臨時文件。

使用 trap 命令可以讓你的腳本更健壯,並確保在處理異常情況時能夠進行適當的清理。