Vô tình chạy một vòng lặp vô hạn trong thiết bị đầu cuối


9

Tôi đã sao chép mã dưới đây từ một số nguồn ngẫu nhiên vào thiết bị đầu cuối của mình và chạy:

while sleep 1;
  do tput sc;
  tput cup 0 $(($(tput cols)-29));
  date;
  tput rc;
done &

Mã này là để hiển thị một đồng hồ đang chạy ở góc trên bên phải của thiết bị đầu cuối. Đoạn mã hoạt động rất tốt và chính xác đã làm những gì tôi muốn, nhưng bây giờ tôi chỉ muốn kết thúc vòng lặp này và thoát khỏi đồng hồ.

Ngoài ra, tôi cần phải hiểu đoạn mã trên. Tôi có một số ý tưởng, vì tôi biết tputlệnh nào thực hiện, nhưng vẫn còn nhiều dấu chấm mà tôi không thể kết nối.


1
Bạn có thể chạy jobstrong phiên của mình để liệt kê các công việc nền đang hoạt động và sau đó đặt nó lên nền trước bằng cách nhập fg <job number>. Sau khi gõ Ctrl + C để dừng vòng lặp vô hạn này. Kịch bản này chỉ hoạt động trong thiết bị đầu cuối chạy đoạn trích.
Yurij Goncharuk

Cảm ơn bạn rất nhiều, một cách rất sạch để thoát khỏi vòng lặp. Điều này sẽ trở thành câu trả lời được chấp nhận.
Kartik Chauhan

Không có gì! Tôi đặt nó dưới dạng câu trả lời dưới đây.
Yurij Goncharuk

1
Lưu ý rằng chỉ cần đóng cửa sổ đầu cuối cũng sẽ chấm dứt tất cả các công việc đang chạy gắn liền với nó.
trlkly

Bạn có hai câu hỏi ở đây. Bạn có thể chia thứ 2, cho một câu hỏi mới.
ctrl-alt-delor

Câu trả lời:


15

Bạn có thể chạy jobslệnh trong phiên của mình để liệt kê các công việc nền đang hoạt động và sau đó đặt chúng lên nền trước bằng cách nhập fg <job number>. Sau đó gõ Ctrl+ Cđể dừng vòng lặp vô hạn này.

Kịch bản này chỉ hoạt động trong thiết bị đầu cuối chạy đoạn trích.


Giải trình:

tput sc - lưu vị trí con trỏ.

tput cup 0 $(($(tput cols)-29))- di chuyển con trỏ đến vị trí 0của trục Y và (count of screen columns minus 29)trục X.

date - chỉ cần in ngày hiện tại.

tput rc - khôi phục vị trí con trỏ.

while sleep 1; ... do ... ; done - vòng lặp có độ trễ 1 giây.

help whileđể biết thêm về whilevòng lặp trong vỏ và làm theo để người đàn ông 1 tput hoặc tldp tput doc biết làm thế nào tput công trình.


Tôi vẫn muốn biết làm thế nào mã đã làm những gì nó đã làm.
Kartik Chauhan

@KartikChauhan Tôi cũng đưa ra một số lời giải thích.
Yurij Goncharuk

@KartikChauhan Bạn nói đúng! Cảm ơn! Tôi vừa sửa cái này.
Yurij Goncharuk

3
kill %1(hoặc một số khác nếu có nhiều công việc) là một thay thế cho fg+Ctrl-C
Roman Odaisky
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.