日付を出力してリモートマシンにpingするためのループを備えた単純なbashスクリプトを作成しました。
#!/bin/bash
while true; do
# *** DATE: Thu Sep 17 10:17:50 CEST 2015 ***
echo -e "\n*** DATE:" `date` " ***";
echo "********************************************"
ping -c5 $1;
done
ターミナルから実行すると、で停止できませんCtrl+C。^Cターミナルに送信するようですが、スクリプトは停止しません。
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
何回押しても、どれだけ速くしても。止めることはできません。
テストを行い、自分で実現します。
副次的な解決策としてCtrl+Z、で停止しkill %1
ます。
ここで何が起きているの^Cでしょうか?
for f in *.txt; do vi "$f"; cp "$f" newdir; done
。ユーザーがファイルの編集中にCtrl + Cを入力vi
すると、メッセージが表示されます。ユーザーがファイルの編集を終了した後もループを継続することは理にかなっています。(そして、はい、あなたが言うことができることを知っていますvi *.txt; cp *.txt newdir
;私はfor
例としてループを提出しています。)