Tôi đã viết một tập lệnh bash đơn giản với một vòng lặp để in ngày và ping đến một máy từ xa:
#!/bin/bash
while true; do
# *** DATE: Thu Sep 17 10:17:50 CEST 2015 ***
echo -e "\n*** DATE:" `date` " ***";
echo "********************************************"
ping -c5 $1;
done
Khi tôi chạy nó từ một thiết bị đầu cuối, tôi không thể dừng nó với Ctrl+C. Có vẻ như nó gửi ^Cthiết bị đầu cuối, nhưng kịch bản không dừng lại.
MacAir:~ tomas$ ping-tester.bash www.google.com
*** DATE: Thu Sep 17 23:58:42 CEST 2015 ***
********************************************
PING www.google.com (216.58.211.228): 56 data bytes
64 bytes from 216.58.211.228: icmp_seq=0 ttl=55 time=39.195 ms
64 bytes from 216.58.211.228: icmp_seq=1 ttl=55 time=37.759 ms
^C <= That is Ctrl+C press
--- www.google.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 40.887/59.699/78.510/18.812 ms
*** DATE: Thu Sep 17 23:58:48 CEST 2015 ***
********************************************
PING www.google.com (216.58.211.196): 56 data bytes
64 bytes from 216.58.211.196: icmp_seq=0 ttl=55 time=37.460 ms
64 bytes from 216.58.211.196: icmp_seq=1 ttl=55 time=37.371 ms
Không có vấn đề bao nhiêu lần tôi nhấn nó hoặc tôi làm nó nhanh như thế nào. Tôi không thể ngăn chặn nó.
Làm bài kiểm tra và nhận ra bởi chính mình.
Là một giải pháp phụ, tôi dừng nó lại Ctrl+Z, rồi dừng lại và sau đó kill %1
.
Chính xác thì chuyện gì đang xảy ra ở đây ^C?
for f in *.txt; do vi "$f"; cp "$f" newdir; done
. Nếu người dùng gõ Ctrl + C trong khi chỉnh sửa một trong các tệp,vi
chỉ cần hiển thị một thông báo. Có vẻ hợp lý rằng vòng lặp nên tiếp tục sau khi người dùng hoàn thành chỉnh sửa tệp. (Và vâng, tôi biết rằng bạn có thể nóivi *.txt; cp *.txt newdir
; Tôi chỉ gửifor
vòng lặp làm ví dụ.)