Rất thường xuyên, chúng tôi chạy một tệp thực thi cần ghi / đọc một số tệp tạm thời. Chúng tôi thường tạo một thư mục tạm thời, chạy tệp thực thi ở đó và xóa thư mục khi tập lệnh được hoàn thành.
Tôi muốn xóa thư mục ngay cả khi thực thi bị giết. Tôi đã cố gắng bọc nó vào:
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Khi my_binary
chết, tiến trình cuối cùng kernel sẽ xóa thư mục, vì script là tiến trình cuối cùng giữ điều đó inode
; nhưng tôi không thể tạo bất kỳ tập tin nào trong thư mục đã xóa.
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
đầu ra touch: file.txt: No such file or directory
Điều tốt nhất tôi có thể đưa ra là xóa thư mục tạm thời khi quá trình chết, bắt các tín hiệu phổ biến nhất và chạy quy trình dọn dẹp với cron:
#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
Có một số cách đơn giản để tạo một thư mục thực sự tạm thời sẽ tự động bị xóa khi nhị phân hiện tại chết, không có vấn đề gì?
cleanup
có thể được thực thi trước khi thực hiện mktemp. Bạn có thể muốnunset dir
trước khi đặt bẫy.