web-dev-qa-db-ja.com

stty -aの出力を理解し、ctrlバックスペースを単にバックスペースに変更します

Solaris環境のbash Shellで作業しており、「backspace」と入力すると、行全体がクリアされます。

行全体をクリアするバックスペースを、予想される動作である文字だけに変更するための提案はありますか?

ローカルでstty -aコマンドの出力をどのように解釈しますかcygwin環境:

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

質問の文言から、Solarisマシンにアクセスするためにcygwinを使用していると想定しています。

stty -aは、端末の現在のすべての設定を表示します。私はそれぞれを通過しません。しかし、 manページ でそれぞれが何をしているのかを読むことができます。

しかし、あなたの問題に特に注意するのはerase = ^?;です。 ^?ASCII制御文字 for DEL(削除)です。必要なのは、BS(バックスペース)の制御文字です。

コマンドラインから、次のように入力できます。

stty erase ^H

ただし、^Hは制御文字であり、制御文字ではないことに注意してください ^H。したがって、これを入力する方法は次のとおりです。

Ctrl+vbackspace

これにより、^Hが画面に出力されます。

それはの振る舞いを変えるはずです backspace あなたが望むものに。しかし、それは現在のセッションの間だけ続くでしょう。

このOracleブログ によると、/kernel/drv/options.confを開いて次の行を探すことにより、構成を永続的に変更できます。

ttymodes="2502:1805:bd:8a3b:3:1c:7f:15:4:0:0:0:11:13:1a:19:12:f:17:16";

7f8に変更して、永続的に再マップします backspaceDELからBSへ。これを有効にするには、再起動が必要です。

2
embedded.kyle