予期しない `nano SomeFile` によってシェルが応答しなくなります。

予期しない `nano SomeFile` によってシェルが応答しなくなります。

単純なテキストファイルから一意の項目(行を読み取る)を取得しようとしたときに誤ってnano SomeTextFile | uniq

この「コマンド」は、シェルを完全に(?)応答しないか使用できないようにします。うしそして戻る。もう一度返さなければなりません。プロセス番号(PID)(を実行してps aux | grep nanosudo kill -9問題のPIDを手動で設定します。

とにかく、上記の内容がいくつかのエラーメッセージを返すことができないか、返すべきではありませんか?Ctrl+なぜCこのパイプを殺さないのですか?これよりも簡単でクリーンな予防方法はありますかkill -9

答え1

パイプシンボルはコマンドの出力をnanoコマンドの入力に送信しますuniq

しかし、nanoまだ実行中であり、キーボード入力を受信して​​います。uniqファイルの終わりを見るまで結果が出力されないため、出力を見ることができません(質問では重要ではありません)。

nano を押すとctrl-cnano に「キャッチされますが」終了しません。

nanoを終了する方法は、次へを押すことです。ctrl-xただし、nano変更された場合(入力後に別のキーを押した場合など)は終了しません。この場合、nano は次のメッセージを表示します。

Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?                                                                
 Y Yes
 N No           ^C Cancel

「n」キーを押すと、変更を保存せずに終了します。

Nanoにいることに気づく前に、いくつかのキーの組み合わせを押すことができます。この場合、いくつかのメニューが深く表示されることがあります。幸い、nanoを押すとctrl-xほとんどのメニューが終了します(ただし、上記のプロンプトはキャンセルされません)。言い換えれば、ctrl-x何度か押しても終了からはやくことはできません。

一部のメニューで「停止」する場合は、通常、次の操作でこれを行うことができます。ctrl-xn回押した後、キーを押します。 それでもうまくいかないと、ctrl-x押しすぎたという意味です。ただ押してください。ctrl-x 一つ時間がかかる場合は、n鍵が必要です。常に動作します。

答え2

他の回答ですでに説明したように、Ctrl+は入力がまだ端末から出ており、端末がまだ制御端末であるCため、Nanoを殺しません。したがって、Nanoは端末を+などの制御文字がプログラムに送信され、信号を生成するために端末Interceptによって使用されません。nanonanoCtrlC

端末によって傍受されると、Ctrl+はC次のものを生成します。知能を知らせる信号。プロセスIDがわかっている場合(Linux構文または他のプロセスリストユーティリティを使用して見つけることができますnano)、このシグナルを送信できます。ここで、12345はPIDです。しかし、SIGINTは伝統的に「メインループに戻る」を意味し、NanoはSIGINTを受信して​​も終了しません。代わりに送ってくださいps u -C nanopspgrep nanokill -INT 12345信号用語、これは「正常終了」を意味します。これは基本信号なので実行できますkill 12345kill -HUP 12345ため息をつく「もうターミナルがありません。ターミナルなしで生きられないならエレガントに出てください」という意味です。他のすべての方法が失敗した場合は送信してください。信号を殺すkill -KILL 12345または有名なkill -9 12345)は、プログラムが死にたいかどうかを望んでいないかどうかを終了します。

Nanoを含む多くのプログラムはCtrl+をZ一時停止として認識します。送信されたのと同じシーケンスです。信号プロトコル信号。プログラムがこのコントロールキーを認識すると、シェルプロンプトが表示され、プログラムがバックグラウンドタスクになるため、簡単に終了できますkill %%(これはバックグラウンドにあった最後のタスクにシグナルを送信します)。

ナノには次のものがあります。別の方法:終了キーシーケンスを送信します。Ctrl+ 後ろにX必要な場合はN「保存しない」が続きます。ただし、一般的に次の点に注意してください。

  1. プログラムが終了しない場合は、+とCtrl入力してみてください。Zkill %%kill -9 %%
  2. Ctrl+が機能しない場合は、Z別の端末に切り替えてプロセスID(ps -t pts/42端末で実行されているプロセスを一覧表示するために使用できる/dev/pts/42)を見つけて終了します。

答え3

シェルはあなたを受け入れませんCtrl+Cnanoはい。割り込み信号のカスタム動作を定義できるプログラムがそのようなnanoプログラムの1つです。リダイレクトなしで開くカスタム動作を確認してnano送信するにはCtrl+C

答え4

ストライクCtrl+ X

Nanoはすべてのキーボード入力をキャプチャし、CtrlNano +内部の意味Cはシェルの意味とは全く異なります。別のウィンドウで実行している場合は、nano終了するにはどのキーを入力する必要があるかを簡単に確認できます。Ctrl+X

関連情報