web-dev-qa-db-ja.com

stdin入力の終了を通知する方法

  1. バッシュでは、ここのドキュメントで終了信号を変更できることを学びました。しかし、デフォルトではどのように標準入力の終了を通知できますか?
  2. たまたまcatとchardetを使用すると、Ctrl + dでstdin入力が完了したことを通知できることがわかりました。しかし、Ctrl + dとCtrl + cは実行中のコマンドの実行を終了することに似ていることを覚えているようです。それで私は間違っていますか?
84
Tim

Ctrl+D、端末の行の先頭に入力すると、入力の終わりを示します。これは、UNIXの意味での シグナル ではありません。アプリケーションが端末から読み取っていて、ユーザーが Ctrl+D、アプリケーションはファイルの終わりに達したことを通知されます(ファイルから読み取りを行っていて、最後のバイトを渡したかのように)。

Ctrl+C シグナルを送信します [〜#〜] sigint [〜#〜] 。デフォルトでは、SIGINT(割り込み信号)はフォアグラウンドアプリケーションを強制終了しますが、アプリケーションは信号をキャッチして何らかの異なる方法で反応できます(たとえば、シェル自体が信号をキャッチし、入力を開始した行を中止しますが、そうではありません)終了すると、新しいプロンプトが表示され、新しいコマンドラインを待ちます)。

stty コマンドを使用して、ファイルの終わりとSIGINTに関連する文字を変更できます。 stty eof aaをファイル終了文字にし、stty intr ^-はSIGINT文字を無効にします。これはめったに役に立ちません。

2つ目のポイントは、2つのまったく異なるものを一緒にまとめます。

  • Ctrl + Cは実行中のプロセスにkillシグナルを送信します。
  • Ctrl + Dは 転送の終了 文字を送信します。

あなたは後者を探しています。

23
Caleb