ตัวจัดการ trap สำหรับการล้างข้อมูลและสัญญาณ
ลงทะเบียน trap ของ EXIT, ERR และ INT เพื่อลบไฟล์ชั่วคราวและย้อนคืนงานที่ทำไว้บางส่วนได้อย่างน่าเชื่อถือ
ตัวจัดการ trap สำหรับการล้างข้อมูลและสัญญาณ เป็นบทเรียน Linux Command Line & Bash Scripting Mastery ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Linux Command Line & Bash Scripting Mastery และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดตัวจัดการกับดักจึงสำคัญ
เมื่อสคริปต์ Bash ออกจากการทำงาน — ไม่ว่าจะตามปกติ เนื่องจากข้อผิดพลาด หรือเพราะผู้ใช้กด Ctrl+C — สคริปต์อาจทิ้งไฟล์ชั่วคราว ข้อมูลที่เขียนไม่เสร็จ หรือสถานะที่เสียหายไว้ หากไม่มีการล้างทรัพยากร สิ่งตกค้างเหล่านี้จะสะสมและก่อให้เกิดปัญหาที่แก้ไขได้ยาก
ตัวจัดการกับดัก แก้ปัญหานี้ด้วยการลงทะเบียนฟังก์ชันหรือคำสั่งที่ Bash จะเรียกใช้โดยอัตโนมัติเมื่อได้รับสัญญาณหรือสัญญาณเสมือนที่ระบุ
- EXIT — ทำงานทุกครั้งที่สคริปต์ออกจากการทำงานไม่ว่าจะด้วยเหตุผลใด
- ERR — ทำงานหลังจากคำสั่งใด ๆ ส่งคืนสถานะการออกที่ไม่เป็นศูนย์
- INT — ทำงานเมื่อผู้ใช้ส่ง SIGINT (Ctrl+C)
- TERM — ทำงานเมื่อได้รับ SIGTERM (เช่น จาก
kill)
สคริปต์ที่เขียนอย่างดีจะลงทะเบียนกับดักเหล่านี้ไว้ที่ส่วนบนสุด ก่อนเริ่มงานที่มีความเสี่ยง
ไวยากรณ์คำสั่งในตัว trap
คำสั่งในตัว trap ใช้ลงทะเบียนตัวจัดการสำหรับสัญญาณหรือสัญญาณเสมือนอย่างน้อยหนึ่งรายการ ไวยากรณ์ทั่วไปคือ:
trap 'command_or_function' SIGNAL [SIGNAL...]
กฎสำคัญ:
- อาร์กิวเมนต์แรกคือสตริงโค้ดเชลล์ที่อยู่ในเครื่องหมายคำพูด (หรือชื่อฟังก์ชัน) ซึ่งจะทำงานเมื่อสัญญาณทำงาน
- คุณสามารถระบุสัญญาณหลายรายการต่อจากตัวจัดการได้
trap '' SIGNALเพิกเฉย ต่อสัญญาณนั้น (ตัวจัดการว่าง)trap - SIGNALคืนค่า สัญญาณให้มีพฤติกรรมเริ่มต้น
กับดักจะถูกสืบทอดโดยฟังก์ชันที่เรียกใช้ในเชลล์เดียวกัน แต่จะ ไม่ ถูกสืบทอดโดยเชลล์ย่อยที่สร้างด้วย ( ) หรือ &
#!/usr/bin/env bash
# Syntax examples — not a full script
# Register a cleanup function on EXIT
trap cleanup EXIT
# Inline handler for INT and TERM
trap 'echo "Interrupted!"; exit 1' INT TERM
# Ignore SIGHUP
trap '' HUP
# Reset SIGPIPE to default
trap - PIPEกับดัก EXIT — ตาข่ายนิรภัยของคุณ
สัญญาณเสมือน EXIT เป็นกับดักที่สำคัญที่สุดที่ควรลงทะเบียน กับดักนี้ทำงานเมื่อเชลล์ออกจากการทำงานไม่ว่า ด้วยเหตุผลใด: ทำงานเสร็จตามปกติ, exit N, ข้อผิดพลาดที่ไม่ได้จัดการ หรือสัญญาณ จึงเหมาะอย่างยิ่งสำหรับการลบไฟล์ชั่วคราว
แนวปฏิบัติที่ดี:
- สร้างไฟล์ชั่วคราวด้วย
mktempเพื่อให้ชื่อไม่ซ้ำและคาดเดาไม่ได้ - เก็บเส้นทางไว้ในตัวแปรทันที
- ลงทะเบียนกับดัก EXIT ทันทีหลังจากสร้าง เพื่อให้การล้างทรัพยากรทำงานเสมอ
รหัสการออกของสคริปต์จะคงเดิม — รหัสการออกของตัวจัดการกับดักจะถูก เพิกเฉย เว้นแต่คุณจะเรียก exit ภายในตัวจัดการอย่างชัดเจน
#!/usr/bin/env bash
set -euo pipefail
TMPFILE=$(mktemp /tmp/myapp.XXXXXX)
cleanup() {
echo "Removing temp file: $TMPFILE" >&2
rm -f "$TMPFILE"
}
trap cleanup EXIT
# Do real work
echo "Processing..." > "$TMPFILE"
sort "$TMPFILE" -o "$TMPFILE"
cp "$TMPFILE" /tmp/myapp_result.txt
echo "Done. Result saved."การจัดการไฟล์และไดเรกทอรีชั่วคราวหลายรายการ
สคริปต์ที่ใช้งานจริงมักสร้างทรัพยากรชั่วคราวหลายประเภท — ไฟล์ ไดเรกทอรี FIFO และไฟล์ล็อก แทนที่จะติดตามแต่ละรายการแยกกัน ให้รวบรวมไว้ในอาร์เรย์และลบทุกอย่างด้วยฟังก์ชันล้างทรัพยากรเพียงฟังก์ชันเดียว
รูปแบบนี้ขยายได้อย่างเป็นระเบียบ ทุกครั้งที่สร้างทรัพยากรชั่วคราวใหม่ ให้เพิ่มทรัพยากรนั้นต่อท้ายอาร์เรย์ กับดัก EXIT จะจัดการรายการทั้งหมดเสมอไม่ว่าสคริปต์จะออกจากการทำงานที่จุดใด
#!/usr/bin/env bash
set -euo pipefail
CLEANUP_TARGETS=()
add_cleanup() {
CLEANUP_TARGETS+=("$1")
}
cleanup() {
echo "Running cleanup..." >&2
for target in "${CLEANUP_TARGETS[@]:-}"; do
rm -rf "$target"
echo "Removed: $target" >&2
done
}
trap cleanup EXIT
# Create and track temp resources
TMPDIR_WORK=$(mktemp -d /tmp/work.XXXXXX)
add_cleanup "$TMPDIR_WORK"
TMPFILE_LOG=$(mktemp /tmp/run.XXXXXX.log)
add_cleanup "$TMPFILE_LOG"
echo "Working in $TMPDIR_WORK" | tee "$TMPFILE_LOG"
touch "$TMPDIR_WORK/output.txt"
echo "Step complete."กับดัก ERR — ตรวจจับความล้มเหลว
สัญญาณเสมือน ERR ทำงานหลังจากคำสั่งธรรมดาใด ๆ ส่งคืนสถานะการออกที่ไม่เป็นศูนย์ โดยมีเงื่อนไขว่า ตัวเลือกเชลล์ set -e (errexit) ทำงานอยู่ หรือคำสั่งนั้นไม่ได้อยู่ภายในโครงสร้างประกอบของ if, while หรือ ||/&&
ใช้กับดัก ERR เพื่อ:
- บันทึกว่าบรรทัดใดล้มเหลวโดยใช้
$LINENOและ$BASH_COMMAND - เรียกใช้ตรรกะย้อนคืนสถานะก่อนที่กับดัก EXIT จะทำงาน
- ส่งข้อความข้อผิดพลาดที่มีโครงสร้างไปยัง stderr
สำคัญ: กับดัก ERR จะ ไม่ ทำงานภายในฟังก์ชัน เว้นแต่คุณจะเรียกใช้ set -E (errtrace) อย่างชัดเจน เพื่อให้ฟังก์ชันสืบทอดกับดัก ERR จากเชลล์ที่เรียกใช้
#!/usr/bin/env bash
set -eEuo pipefail
on_error() {
local exit_code=$?
local line=$1
echo "ERROR: command failed with exit code $exit_code at line $line" >&2
echo " Command: $BASH_COMMAND" >&2
}
trap 'on_error $LINENO' ERR
echo "Starting task..."
cp /nonexistent/file /tmp/ # This will fail
echo "This line is never reached."กับดัก INT — จัดการ Ctrl+C อย่างเหมาะสม
การกด Ctrl+C จะส่ง SIGINT ไปยังกลุ่มกระบวนการเบื้องหน้า หากไม่มีกับดัก Bash จะออกจากการทำงานทันที และอาจทิ้งงานที่ทำค้างไว้บางส่วน
การลงทะเบียนกับดัก INT ช่วยให้คุณสามารถ:
- แสดงข้อความยกเลิกที่เข้าใจง่ายสำหรับผู้ใช้
- ย้อนคืนสถานะระหว่างทางก่อนส่งต่อให้กับดัก EXIT
- ออกจากการทำงานด้วยรหัสสถานะที่มีความหมาย (
130เป็นรหัสมาตรฐานสำหรับ SIGINT:128 + 2)
หลังจากตัวจัดการ INT ทำงานเสร็จ ให้เรียก exit 130 เพื่อส่งต่อรหัสการออกที่ถูกต้อง จากนั้นกับดัก EXIT จะทำงานโดยอัตโนมัติ
#!/usr/bin/env bash
set -euo pipefail
TMPFILE=$(mktemp /tmp/demo.XXXXXX)
cleanup() {
rm -f "$TMPFILE"
echo "Temp file removed." >&2
}
on_interrupt() {
echo "" >&2
echo "Caught SIGINT — cancelling gracefully." >&2
exit 130 # EXIT trap (cleanup) runs automatically after this
}
trap cleanup EXIT
trap on_interrupt INT
echo "Running long task. Press Ctrl+C to cancel."
for i in $(seq 1 10); do
echo "Step $i/10..."
sleep 1
done
echo "All steps complete."การรวมกับดัก EXIT, ERR และ INT
ในสคริปต์สำหรับใช้งานจริง โดยทั่วไปคุณจะลงทะเบียนกับดัก ทั้งสามรายการ ร่วมกันเพื่อครอบคลุมเส้นทางการออกจากการทำงานทุกแบบ:
- EXIT — ทำงานเสมอ และจัดการการล้างไฟล์
- ERR — บันทึกคำสั่งและหมายเลขบรรทัดที่ล้มเหลว
- INT — แสดงข้อความยกเลิกและออกด้วยรหัส 130
เนื่องจาก EXIT ทำงานเป็นรายการสุดท้ายเสมอ ตรรกะการล้างทรัพยากรจึงจำเป็นต้องอยู่เพียงที่เดียว ตัวจัดการ ERR และ INT มุ่งเน้นการบันทึกข้อมูลและตั้งค่าสถานะได้ จากนั้นมอบหมายการล้างทรัพยากรจริงให้ EXIT ด้วยการเรียก exit
ใช้ set -eEuo pipefail ที่ส่วนบนสุด เพื่อให้ข้อผิดพลาดในฟังก์ชันเรียกใช้ ERR ได้เช่นกัน และเพื่อให้ pipefail ตรวจจับความล้มเหลวภายในสายคำสั่ง
#!/usr/bin/env bash
set -eEuo pipefail
TMPFILE=$(mktemp /tmp/combined.XXXXXX)
ROLLBACK_NEEDED=false
cleanup() {
if [[ "$ROLLBACK_NEEDED" == true ]]; then
echo "Rolling back partial changes..." >&2
fi
rm -f "$TMPFILE"
echo "Cleanup done." >&2
}
on_error() {
ROLLBACK_NEEDED=true
echo "ERR at line $1: $BASH_COMMAND" >&2
}
on_interrupt() {
echo "Interrupted by user." >&2
exit 130
}
trap cleanup EXIT
trap 'on_error $LINENO' ERR
trap on_interrupt INT
echo "hello" > "$TMPFILE"
echo "Script finished successfully."การคืนค่าและปิดใช้งานกับดักแบบพลวัต
บางครั้งคุณจำเป็นต้อง แก้ไขกับดักระหว่างการทำงานของสคริปต์ — ตัวอย่างเช่น ล้างทรัพยากรเพียงครั้งเดียวหลังจากส่วนสำคัญทำงานเสร็จ เพื่อไม่ให้การทำงานปกติในภายหลังเรียกใช้การย้อนคืนสถานะโดยไม่จำเป็น
trap - SIGNALคืนค่าสัญญาณให้มีพฤติกรรมเริ่มต้นในตัวtrap '' SIGNALเพิกเฉยต่อสัญญาณนั้นทั้งหมด (กระบวนการจะไม่สามารถถูกหยุดด้วยสัญญาณดังกล่าว)- คุณสามารถลงทะเบียนตัวจัดการใหม่ได้ทุกจุด โดยการเรียกใช้
trapครั้งล่าสุดจะมีผล
รูปแบบที่ใช้บ่อยคือปรับกับดัก EXIT หลังจากการดำเนินการที่มีความเสี่ยงสำเร็จ โดยเปลี่ยนจากตัวจัดการย้อนคืนสถานะเป็นตัวจัดการล้างทรัพยากรแบบง่าย
#!/usr/bin/env bash
set -euo pipefail
TMPFILE=$(mktemp /tmp/staged.XXXXXX)
rollback() {
echo "ROLLBACK: removing $TMPFILE" >&2
rm -f "$TMPFILE"
}
cleanup_only() {
echo "CLEANUP: removing $TMPFILE" >&2
rm -f "$TMPFILE"
}
# Start with rollback in case something fails during the risky phase
trap rollback EXIT
echo "Performing risky operation..."
echo "critical data" > "$TMPFILE"
# ... imagine more risky steps here ...
# Risky phase succeeded — switch to simple cleanup
trap cleanup_only EXIT
echo "Risky phase done. Now doing safe finalization."
cp "$TMPFILE" /tmp/staged_result.txt
echo "All done."การส่งต่อรหัสการออกผ่านกับดัก
ข้อผิดพลาดที่ละเอียดอ่อนประการหนึ่งคือ หากฟังก์ชันล้างทรัพยากรของคุณมีคำสั่งที่อาจล้มเหลว รหัสการออกสุดท้ายของสคริปต์อาจถูกเขียนทับ ให้เก็บรักษารหัสการออกเดิมไว้อย่างชัดเจน
ภายในตัวจัดการกับดัก $? จะเก็บรหัสการออกที่ เรียกใช้ กับดักนั้น ให้เก็บค่านี้ไว้ตั้งแต่บรรทัดแรกของตัวจัดการ ก่อนที่คำสั่งอื่นจะเปลี่ยนค่า
#!/usr/bin/env bash
set -euo pipefail
TMPFILE=$(mktemp /tmp/exitcode.XXXXXX)
cleanup() {
local original_exit=$? # capture BEFORE any other command
echo "Cleaning up (original exit: $original_exit)" >&2
rm -f "$TMPFILE"
# Exit with the original code so callers see the real result
exit "$original_exit"
}
trap cleanup EXIT
echo "Doing work..."
echo "data" > "$TMPFILE"
# Simulate failure
if [[ ! -f /tmp/required_marker ]]; then
echo "Required marker missing!" >&2
exit 2
fi
echo "Done."กับดักในฟังก์ชันและเชลล์ย่อย
การทำความเข้าใจเรื่อง การสืบทอด กับดักมีความสำคัญอย่างยิ่งต่อการเขียนสคริปต์ที่ทำงานถูกต้อง:
- ฟังก์ชัน ทำงานในเชลล์เดียวกันและสืบทอดกับดัก — แต่ ERR จะส่งต่อไปยังฟังก์ชันก็ต่อเมื่อ
set -E(errtrace) ทำงานอยู่ - เชลล์ย่อย (
( ... )) เริ่มต้นด้วยสำเนากับดักของเชลล์แม่ แต่การเปลี่ยนแปลงภายในเชลล์ย่อยจะไม่ส่งผลต่อเชลล์แม่ - งานเบื้องหลัง (
cmd &) คือเชลล์ย่อย และจะ ไม่ สืบทอดกับดัก INT/TERM ของเชลล์แม่ (จะใช้การจัดการสัญญาณเริ่มต้น)
กฎเชิงปฏิบัติ: ลงทะเบียนกับดักไว้ในเนื้อหาหลักของสคริปต์ ใช้ set -E เมื่อจำเป็นต้องให้ ERR ส่งต่อไปยังฟังก์ชัน และอย่าพึ่งพาการสืบทอดกับดักข้าม &
#!/usr/bin/env bash
set -eEuo pipefail # -E = errtrace: ERR propagates into functions
on_error() {
echo "ERR in function or main at line $1" >&2
}
trap 'on_error $LINENO' ERR
risky_function() {
echo "Inside risky_function"
ls /nonexistent_path # triggers ERR — works because of set -E
}
# Subshell: has its own copy; changes don't affect parent
(
trap '' ERR # disable ERR only inside subshell
ls /nonexistent_path 2>/dev/null || true
echo "Subshell completed without triggering parent ERR"
)
risky_functionรูปแบบการใช้งานจริง: การแทนที่ไฟล์แบบอะตอมิก
รูปแบบการเขียน Bash เชิงป้องกันที่ใช้กันมาอย่างแพร่หลายคือ การแทนที่ไฟล์แบบอะตอมิก: เขียนลงไฟล์ชั่วคราวก่อน แล้วจึงเปลี่ยนชื่อไปยังตำแหน่งปลายทาง หากมีสิ่งใดล้มเหลวก่อนการเปลี่ยนชื่อ ไฟล์ต้นฉบับจะไม่ถูกแตะต้อง กับดักช่วยทำให้รูปแบบนี้ปลอดภัยอย่างรัดกุม
ขั้นตอน:
- สร้างไฟล์ชั่วคราวใน ระบบไฟล์เดียวกันกับปลายทาง (เพื่อให้
mvเป็นการดำเนินการแบบอะตอมิก) - ลงทะเบียนกับดัก EXIT เพื่อลบไฟล์ชั่วคราวหากต้องออกจากการทำงานก่อนเวลา
- เขียนและตรวจสอบเนื้อหาใหม่
- เปลี่ยนชื่อแบบอะตอมิก (
mv) — ต้นฉบับจะถูกแทนที่ ณ จุดนี้เท่านั้น - กับดัก EXIT จะลบไฟล์ชั่วคราวก็ต่อเมื่อไฟล์นั้นยังมีอยู่ (หลังจาก
mvสำเร็จ ไฟล์จะหายไปแล้ว)
#!/usr/bin/env bash
set -euo pipefail
DEST="/tmp/important_config.conf"
TMPFILE=$(mktemp "$(dirname "$DEST")/.tmp.XXXXXX")
cleanup() {
rm -f "$TMPFILE" # no-op if mv already moved it
}
trap cleanup EXIT
# Write new content to temp file
cat > "$TMPFILE" <<'EOF'
[settings]
version=2
mode=production
EOF
# Validate before replacing
if ! grep -q 'version=' "$TMPFILE"; then
echo "Validation failed — aborting replacement" >&2
exit 1
fi
# Atomic rename — DEST is replaced only here
mv "$TMPFILE" "$DEST"
echo "Config updated atomically: $DEST"ตรวจสอบความเข้าใจ: การสืบทอดกับดัก ERR
ทดสอบความเข้าใจของคุณเกี่ยวกับพฤติกรรมของกับดัก ERR เมื่อใช้ร่วมกับฟังก์ชันใน Bash
ทบทวน: ตัวจัดการกับดักสำหรับการล้างทรัพยากรและสัญญาณ
ในบทเรียนนี้ คุณได้เรียนรู้วิธีทำให้สคริปต์ Bash ทนทานต่อปัญหาด้วย ตัวจัดการกับดัก:
- EXIT คือตาข่ายนิรภัยสำหรับทุกกรณี — ลงทะเบียนทันทีหลังจากสร้างทรัพยากรชั่วคราวใด ๆ และเก็บค่า
$?ไว้ก่อนเสมอ เพื่อรักษารหัสการออกเดิม - ERR ช่วยให้คุณบันทึกความล้มเหลวด้วย
$LINENOและ$BASH_COMMANDใช้set -Eเพื่อให้ฟังก์ชันสืบทอดกับดักนี้ - INT จัดการ Ctrl+C อย่างเหมาะสม — แสดงข้อความและออกด้วยรหัส 130 เพื่อให้ EXIT ล้างทรัพยากร
- รวบรวมทรัพยากรชั่วคราวไว้ใน อาร์เรย์ และลบทั้งหมดด้วยฟังก์ชันล้างทรัพยากรเพียงฟังก์ชันเดียว
- ใช้
trap - SIGNALเพื่อคืนค่า และใช้trap '' SIGNALเพื่อเพิกเฉยต่อสัญญาณแบบพลวัต - รูปแบบการเปลี่ยนชื่อแบบอะตอมิก (
mktemp→ เขียน → ตรวจสอบ →mv) เมื่อใช้ร่วมกับกับดัก EXIT จะรับประกันว่าการเขียนไม่เสร็จจะไม่ทำให้ไฟล์ปลายทางเสียหาย
การใช้ set -eEuo pipefail ร่วมกับกับดักที่วางไว้อย่างเหมาะสม จะมอบพื้นฐานเชิงป้องกันที่มั่นคงสำหรับสคริปต์ Bash ที่ใช้งานจริงทุกชนิด
คำถามที่พบบ่อย
บทเรียน “ตัวจัดการ trap สำหรับการล้างข้อมูลและสัญญาณ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวจัดการ trap สำหรับการล้างข้อมูลและสัญญาณ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Linux Command Line & Bash Scripting Mastery ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวจัดการ trap สำหรับการล้างข้อมูลและสัญญาณ”
ลงทะเบียน trap ของ EXIT, ERR และ INT เพื่อลบไฟล์ชั่วคราวและย้อนคืนงานที่ทำไว้บางส่วนได้อย่างน่าเชื่อถือ คุณปฏิบัติ Linux Command Line & Bash Scripting Mastery ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Linux Command Line & Bash Scripting Mastery หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Linux Command Line & Bash Scripting Mastery บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวจัดการ trap สำหรับการล้างข้อมูลและสัญญาณ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Linux Command Line & Bash Scripting Mastery นี้ได้ไหม
ได้ บทเรียน Linux Command Line & Bash Scripting Mastery ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โหมดเข้มงวดด้วย set -euo pipefail
- ตัวจัดการ trap สำหรับการล้างข้อมูลและสัญญาณ
- ไฟล์ชั่วคราวและไดเรกทอรีล็อกที่ปลอดภัย
- สคริปต์แบบทำซ้ำได้อย่างปลอดภัยและตรรกะลองใหม่แบบถอยกลับ