知らないうちにターミナルで無限ループを実行しました


9

以下のコードをランダムソースからターミナルにコピーして実行しました。

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

コードは、端末の右上隅に実行中の時計を表示することです。スニペットは非常にうまく機能し、私が望んでいたことを正確に実行しましたが、今はこのループを終了して時計を取り除きたいだけです。

また、上記のコードを理解する必要があります。tputコマンドが何をするのか知っているので、いくつかのアイデアがありますが、それでも接続できないドットがたくさんあります。


1
jobsセッションで実行してアクティブなバックグラウンドジョブを一覧表示し、と入力してフォアグラウンドに配置できますfg <job number>。Ctrl + Cを入力した後、この無限ループを停止します。このシナリオは、スニペットを実行するターミナルでのみ機能します。
Yurij Goncharuk

ループを取り除く非常にクリーンな方法で、本当にありがとうございました。これは受け入れられる答えになるはずです。
Kartik Chauhan

どういたしまして!答えは以下のとおりです。
Yurij Goncharuk

1
ターミナルウィンドウを閉じるだけでも、それに接続されている実行中のすべてのジョブが終了します。
trlkly

ここで2つの質問があります。2つ目を新しい質問に分割できますか。
ctrl-alt-delor

回答:


15

jobsセッションでコマンドを実行してアクティブなバックグラウンドジョブを一覧表示し、と入力してそれらをフォアグラウンドに配置できますfg <job number>。次にCtrl+ Cを入力して、この無限ループを停止します。

このシナリオは、スニペットを実行するターミナルでのみ機能します。


説明:

tput sc -カーソル位置を保存します。

tput cup 0 $(($(tput cols)-29))-カーソルを0Y軸と(count of screen columns minus 29)X軸の位置に移動します。

date -ちょうど現在の日付を印刷します。

tput rc -カーソル位置を復元します。

while sleep 1; ... do ... ; done -1秒の遅延でループします。

入力help whileについて詳しく知るためにwhile、シェルのループとに従ってください男1 TPUTまたはドキュメントTPUT TLDP TPUTがどのように動作するかを知っています。


私はまだコードがどのようにそれがしたことをしたか知りたいです。
Kartik Chauhan

@KartikChauhan私もいくつかの説明を入れました。
Yurij Goncharuk

@KartikChauhanあなたは正しいです!ありがとう!私はこれを修正しました。
Yurij Goncharuk

3
kill %1fg+ (複数のジョブがある場合は別の番号)が+の代わりになりますCtrl-C
Roman Odaisky
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.