Tôi đã đọc Chapter 2 of the Advanced Bash-Scripting Guide nơi tôi đọc về kịch bản này trong một footnote:Làm cách nào để tập lệnh được mở đầu bằng #!/Bin/rm xóa chính nó?
#!/bin/rm
# Self-deleting script.
# Nothing much seems to happen when you run this... except that the file disappears.
WHATEVER=85
echo "This line will never print (betcha!)."
exit $WHATEVER # Doesn't matter. The script will not exit here.
# Try an echo $? after script termination.
# You'll get a 0, not a 85.
Thường rm
có một đối số và xóa tập tin đó. Ở đây, rm
bằng cách nào đó biết hành động dựa trên tập lệnh mà nó thực thi. Điều đó có nghĩa là khi một vỏ gặp #!
, nó sẽ chuyển đường dẫn (đầy đủ điều kiện?) Đến tệp đó làm đối số cho chương trình được chỉ định sau #!
?
Về bất kỳ hệ thống giống Unix nào, '#!' Được xử lý bởi hạt nhân chứ không phải bởi trình bao. –
@KeithThompson: Cảm ơn vì điều đó! Đó là thực tế tại (không may) unstated) trái tim của câu hỏi của tôi. Vì vậy, trình bao vượt qua kiểm soát để 'tập tin' và sau đó đến hạt nhân? –
@KeithThompson bạn có thể giải thích nó không? Khi bạn gõ lệnh trong bash cho sh interpreter, bash sẽ phân tích cú pháp dòng đầu tiên của tập tin cho #! để tìm bất kỳ trình thông dịch nào khác được yêu cầu để thực thi tệp. Vui lòng xem phần "GIAO THÔNG THƯỜNG XUYÊN" trong trang bash man để biết chi tiết cách bash thực thi lệnh. –