bashコマンドの実行前後にtty属性を設定するには?

bashコマンドの実行前後にtty属性を設定するには?

疑似ターミナルスレーブファイルを開き、xterm実行してみますtty(1つと仮定/dev/pts/0)。その後、別のものを開いてxterm実行します。

$ stty -F /dev/pts/0
speed 38400 baud; line = 0;
lnext = <undef>; discard = <undef>; min = 1; time = 0;
-brkint -icrnl -imaxbel iutf8
-icanon -echo

/bin/sleep 1000次に、まずxtermで実行します。次に、stty2 番目の xterm で同じコマンドを再実行します。

$ stty -F /dev/pts/0
speed 38400 baud; line = 0;
-brkint -imaxbel iutf8

sleepその後、最初のxtermでコマンドを終了します。次に、stty2 番目の xterm で同じコマンドを再実行します。

$ stty -F /dev/pts/0
speed 38400 baud; line = 0;
lnext = <undef>; discard = <undef>; min = 1; time = 0;
-brkint -icrnl -imaxbel iutf8
-icanon -echo

bashは、コマンドを実行する前にtty属性を変更し、コマンドを実行した後に復元するのを見ることができます。 bashのドキュメントのどこで説明されていますか?すべてのtty属性が復元されますか、またはプログラムで変更された場合、一部の属性が復元されない可能性がありますか?

ベストアンサー1

readline(3)これは通常bashの一部として静的に構築されますが、他のプログラムでも使用される行編集ライブラリです。

ユーザーのコマンドを読み始めるたびに、readlineはターミナル設定を保存し、ターミナルを「raw」モード[1]に設定して挿入ポイントを左右に動かし、戻ったときに履歴からreadline(3)コマンドを呼び出します。 Enterキーを押すと、端末の元の設定が復元されます。 Readlineは信号を台無しにすることもできます。謎のような行動

をstraceする場合は(whichimplements)と()bashを見つけます。 bashを実行すると、端末設定が維持されていることがわかります。ioctl(TCSETS*)tcsetattr(3)ioctl(TCGETS)tcgetattr(3)stty(1)--noediting

[1]正確に「生」モードではありませんが、具体的cfmakeraw(3)な詳細を見ることができます。ここ。これらの端末設定はすべてtermios(3)マンページに文書化されています。

おすすめ記事