Mặc dù các câu trả lời trước đây ở đây đều đáp ứng yêu cầu về sự hoàn hảo, bạn cũng có thể tắt máy ngay khi hoàn thành nhiệm vụ.
bash
tập lệnh có thể là trap
ped, nghĩa là một số tín hiệu có thể bị chặn và một số tác vụ nhất định có thể được thực thi khi cần. EXIT
là một trong những tín hiệu có thể bị mắc kẹt.
Bạn sẽ có thể:
- Đặt
trap
cho EXIT
các tập lệnh shell tự động của bạn, nghĩa là chấm dứt các tác vụ tự động của bạn
- Đặt
trap
cho bạn .bashrc
EXIT
, nghĩa là bất cứ khi nào bạn đăng xuất khỏi máy đó, tắt nguồn.
Tùy chọn # 1 sẽ là trường hợp lý tưởng, miễn là các nhiệm vụ của bạn không yêu cầu kiểm tra adhoc và phán đoán thủ công.
Tùy chọn # 2 sẽ bao gồm các trường hợp bạn quên thoát khỏi thiết bị đầu cuối mà không tắt nguồn. Có một cảnh báo mặc dù; nếu bạn có nhiều thiết bị đầu cuối cho cùng một máy mở và bạn thoát khỏi một trong số chúng, nó vẫn sẽ tắt nguồn máy như nhau. (Có thể viết kịch bản để tránh điều đó, nhưng tôi sẽ không làm phức tạp hóa giải pháp.)
cleanup(){
# Do some tasks before terminating
echo oh la la, cleaning is so nice
echo "See you later, world"
sudo poweroff & # finally shutdown
}
trap cleanup EXIT
Điều này có thể ở cuối .bashrc
tùy chọn # 2, ở đâu đó ở đầu tập lệnh của bạn cho tùy chọn # 1.
Tại sao không sử dụng poweroff
ở cuối tập lệnh?
Tôi thích sử dụng set -eo pipefail
ở trên cùng của kịch bản của tôi. Nếu có lỗi xảy ra, nó sẽ không âm thầm thất bại; nó sẽ dừng thực thi nhiều lệnh hơn. trap
của EXIT
tín hiệu sẽ bao gồm các trường hợp tập lệnh kết thúc sớm do lỗi.
Tuy nhiên, đối với nhiệm vụ của bạn, điều này cũng có nghĩa là máy sẽ tắt trước khi hoàn thành.
Tôi có một bash
mẫu đơn giản mà tôi sử dụng để làm cho kịch bản dễ gỡ lỗi hơn; có lẽ nó có thể được sử dụng Xin vui lòng xem ý chính này .
at
(thực hiện một lần).