如何使用 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
這個腳本會捕捉 SIGINT
和 SIGTERM
信號並根據不同的信號執行不同的命令。
清理臨時文件
一個實用的例子,當腳本退出時自動刪除臨時文件:
#!/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
命令可以讓你的腳本更健壯,並確保在處理異常情況時能夠進行適當的清理。