UPDATE: đây là một repost của How to make shell scripts robust to source being changed as they runTập lệnh shell có thể chỉ ra rằng các dòng của nó được nạp vào bộ nhớ ban đầu không?
Đây là một điều nhỏ làm tôi bực mình tất cả bây giờ và sau đó:
- tôi viết một kịch bản shell (bash) cho một công việc nhanh chóng và dơ bẩn
- Tôi chạy tập lệnh và chạy trong một thời gian khá là
- Trong khi chạy, tôi chỉnh sửa một vài dòng trong tập lệnh, định cấu hình nó cho một công việc khác
- Nhưng quá trình đầu tiên vẫn đang đọc cùng một tệp tập lệnh và được tất cả các hơi say lên.
Dường như, tập lệnh được diễn giải bằng cách tải từng dòng từ tệp vì nó là cần thiết. Có một số cách mà tôi có thể có kịch bản chỉ ra cho vỏ rằng toàn bộ tập lệnh nên được đọc vào bộ nhớ cùng một lúc? Ví dụ, các kịch bản Perl dường như làm điều này: chỉnh sửa tệp mã không ảnh hưởng đến một quá trình hiện đang diễn giải nó (vì nó được phân tích cú pháp/biên dịch ban đầu?).
Tôi hiểu rằng có nhiều cách để giải quyết vấn đề này. Ví dụ, tôi có thể thử một cái gì đó như:
cat script.sh | sh
hoặc
sh -c "`cat script.sh`"
... mặc dù những người có thể không hoạt động chính xác nếu các tập tin kịch bản là lớn và có giới hạn về kích thước của bộ đệm dòng và đối số dòng lệnh. Tôi cũng có thể viết một wrapper phụ trợ sao chép một tập tin kịch bản vào một tập tin tạm thời bị khóa và sau đó thực hiện nó, nhưng điều đó không có vẻ rất di động.
Vì vậy, tôi đã hy vọng cho giải pháp đơn giản nhất có liên quan đến việc sửa đổi chỉ cho tập lệnh, không phải cách thức mà nó được gọi. Tôi có thể thêm một hoặc hai dòng vào lúc bắt đầu tập lệnh không? Tôi không biết nếu một giải pháp như vậy tồn tại, nhưng tôi đoán nó có thể sử dụng biến $ 0 ...
Đây là bản sao của http://stackoverflow.com/questions/2285403/how-to-make-shell-scripts-robust-to-source-being-changed-as-they-run – camh
Cảm ơn, camh! Đây là hoàn hảo. – Anonymous
Bạn có thể xóa tập lệnh trong khi đang chạy, để tránh chỉnh sửa. (Đây có lẽ là [ephemient] (http://stackoverflow.com/users/20713/ephemient) và [Ryan Thompson] (http://stackoverflow.com/users/125921/ryan-thompson) có nghĩa là.) Xem [ bài đăng này] (http://stackoverflow.com/questions/8335747/emacs-workflow-to-edit-bash-scripts-while-they-run) vì lý do và cách tự động hóa nó. –