`stty -echoはどのように機能しますか? cat -v; stty echo`は特別なキーをエコーできますか?

`stty -echoはどのように機能しますか? cat -v; stty echo`は特別なキーをエコーできますか?

stty -echo; cat -v; stty echo端末に送信されたキーを見る技術です。しかし、このコマンドがどのように機能するかを知りたいです。削除すると、stty -echo入力した内容が2回印刷されます。stty -echo端末から入力した内容が印刷されないようにすることがわかります。より具体的に言えば、私が欲しいもの" ';'を使用して最初にバックログを無効にしてから、cat -vコマンドの後に有効にできるのはなぜですか?基本的に?

ベストアンサー1

;コマンドを分離して1つずつ実行するだけです。

catここでインタラクティブシェルのプロンプトでこのコマンドを入力すると、正常に終了する限り(Ctrl+をD2回使用するかスペースキーを押す場合)プロンプトに戻ると、端末デバイスローカルエコーが無効になって再度できるようになります。ワイヤー)。

catSIGINTまたはSIGQUITで中断された場合(Ctrl+CまたはCtrl+を押した場合\)、シェルはコマンドラインbash全体をキャンセルするため、stty echoコマンドはいいえ実行され、ローカルエコーは再びアクティブになりません。

zshシェルでは、次のことができます。

STTY=-echo cat -vt

これは、コマンド期間中にのみ特定のtty設定を変更する特別な構文です。これにより、中断されてもcattty設定が復元されます。

しかしzsh、何があっても、ttyローカルエコーは常にそれ自体に復元されます。

ではbash、ヘルパー関数を使用して次の操作を実行できます。

with_different_tty_settings() (
  tty_settings=$(stty -g) # save current settings
  trap 'stty "$tty_settings"' INT EXIT QUIT
  set -o noglob
  local IFS
  stty $STTY # split $STTY on default IFS characters
  "$@"
)

次のように呼び出されますcat

STTY=-echo with_different_tty_settings cat -vt

zshSTTY(ジョブの一時停止(例:+)を処理しないsとは対照的ですCtrl。)Z

に変更すると、+で送信された文字が表示STTY='-echo -isig'されます。CtrlC

それでSTTY='raw -echo'見ることができますみんな文字(tty行規則に従って変更されず、一度入力されると)を終了できませんcat

ただし、3秒間アクティビティがない場合は終了できますSTTY='raw -echo time 30 min 0'cat

おすすめ記事