端末のプロパティが端末の外側と異なるように見えるのはなぜですか?

端末のプロパティが端末の外側と異なるように見えるのはなぜですか?

端末(xfce4-terminal 0.6.3が問題になるかどうか疑問です)を開き、どの端末属性が設定されているかを確認すると(BASHが端末で実行されています)

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -extproc

その後、端末のプロパティがたくさんあります。十分です。私が使っている端末を見てみると、次のようになります。

$ tty
/dev/pts/0

次に、端末の新しいタブ(新しいタブは/ dev / pts / 1)で端末のプロパティを確認します。最初端末の場合、端末の属性が若干異なるようです。

$ stty -a -F /dev/pts/0
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = <undef>; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -extproc

ここの元の端末は標準モードではないようで、文字通り次の特殊文字がないことに注目する価値があります。

それでは、なぜこれが起こるのですか?たとえば、現代で標準モードを使用している場合など、同様のものを見ることができるようにしたいのですedが、別のターミナルで見ると、Heisenbergに問題がある場合はどうすればいいのかわかりません。

だから私の2つの主な質問は次のとおりです。

  1. 他の端末で見ると、端末の属性が違うように見えますか? (たとえば、最初の端末はまだ標準モードですが、stty -a -F間違った情報を返しますか?)
  2. 端末にいる場合本物別の端末に切り替えたときにプロパティが変更された場合はどうすればわかりますか?最初の端末を直接見ていない場合は、何とか通知を受けますか?

PS:疑似端末ではないことを確認するために、Linuxコンソールでもこれを試しました。結果は同じです。

ベストアンサー1

Bashは、コマンドライン入力を待っている間に、端末を一度に文字モードに設定する必要があります。そうすれば、emacsやviに似た編集文字を使用してコマンドラインを編集できます。これは、他の端末で端末のプロパティを表示したときに例に表示されるパターンです。

プログラムを実行する直前(例えばstty)bashは、端末を標準モードに戻します。ここで、オペレーティングシステムはバックスペースやControl-Wなどのいくつかの特殊編集文字のみを提供し、デフォルトではプログラムはEnterを入力した後にのみ入力を受け取ります。

プログラムが完了したり一時停止した後など、Bashが制御を取得すると、端末は文字モードに戻ります。

おすすめ記事