Ctrl + Cのときに^ Cを削除


25

Red Hat Enterprise Linux 6( "Santiago")のシェルインクルードで+ を^C押したときに削除する方法はありますか?自分で編集する許可があります。CTRLC.bash_profile


4
試してくださいset echo-control-characters off
サンディープ16

1
私は試みたが、それはうまくいきませんでした
FEDEゴールド

回答:


29

~/.inputrcファイルを編集(または作成)します。という行を追加します

set echo-control-characters Off

これは、GNU Readlineライブラリ(Bashが使用する)に、画面に制御文字を出力(エコー)しないように指示します。この設定は、その後のすべての新しいBashセッション(およびReadlineライブラリを使用する他のユーティリティ)でアクティブになります。

UnixシステムにReadlineライブラリ用のシステム全体の構成ファイル(通常)が付属している場合/etc/inputrcは、個人用構成ファイルにそのファイルを含める必要があることに注意しください。

$include /etc/inputrc
set echo-control-characters Off

もう1つの方法は、システム全体の構成ファイルの個人用コピーを作成してから変更することです。


こんにちは、私はこれをテストし、その作業罰金が、私は実行しているbashコマンドを中断するときには、例えば、勤務didntのsleep 180プレスCTRL + C
rɑːdʒɑ

@ Ten-Coinコマンドが残念ながらReadlineライブラリを使用する場合にのみ機能します。
クサラナンダ

1
~/.inputrcまだ存在しない場合は、ファイルを作成するだけで既存の設定が失われる場合があります。私の場合、ctrl + leftとctrl + rightが機能しなくなったことに最初に気付きました。修正は~/.inputrc、この行から始めることでした$include /etc/inputrccp /etc/inputrc .inputrc必要に応じて、ただ編集して編集することもできます。
カスペルド16

2
@kasperd良い点!個人用の構成ファイルを追加すると、システム全体の構成ファイルの読み取りが無効になることを知りませんでした(私のシステムにはありません)。回答を更新します。
クサラナナンダ

20

以下を試してください:

stty -echoctl

説明についてはStéphaneChazelasのこのすばらしい詳細な投稿をstty参照してください。他の機能についても説明しています

その変更を永続的なものにしたい場合(そしてbash質問で暗示されているように使用している場合)、jlmgのコメントに.bashrc記載されているように(あなたがすべての対話型シェルに適用されるように)入れるのが最善です。


+1 readlineソリューションとは対照的に、これは端末で実行されているすべてではないにしても、ほとんどの場合に機能するはずです。
JoL 16

1
.bash_profileそのファイルはログインシェルによってのみ解析されるため、すべてのターミナルで機能するわけではないことをおそらく言及する必要があります。.bashrc代わりに配置する必要があるため、すべてのインタラクティブな呼び出しで読み取られます。
JoL 16

1
これは、理論的には一部の端末で解釈される可能性のある生の0x03バイトをエコーし​​ませんか?また、readline以外のコマンドを実行するなどの操作を行う場合、副作用があります。矢印キーを押すと、表示されるのではなく画面上でカーソルが移動します^[[A
Random832

1
@ Random832 +1その通りです。設定の名前はひどいものだと思います。制御文字のエコーを制御するのではなく、エコー前の印刷可能文字への変換を制御します。その副作用を防ぐには、あなたもそうする必要がありstty -echoます。もちろん、それは他のすべてのエコーも防止します。これはおそらく、^Cs を非表示にするだけであれば、この答えはノーゴーになります。
JOL

1
@jlmg ^Cが最後にあった場合、私はあなたに同意するかもしれません。ただし、^Cカーソルがあった場所に印刷されるため、コマンド内の任意の場所にある文字のペアを上書きできます。つまり、そのコマンドの一部をコピーして貼り付ける必要がある場合、何かが壊れてしまう可能性があります。また、^C端末を見たときに、コマンドの最後にある場合ほど簡単に認識されません。
カスペルド

2

通常のエコー(を含むechoctl)を許可し、信号生成文字のエコーを無音にする構成を見つけようとしている場合、以前にそのように動作するのを見たので、それが可能であるはずです...

おそらくそのように見たことがあるでしょう。しかし、このコミットのため、もはや不可能です:

コミットec5b1157f8e819c72fc93aa6d2d5117c08cdc961

N_TTY回線制御でINTR / QUIT / SUSPエコーをオンにします(たとえば、stty echoctlが設定され、ctrl-CがINTRとして設定されている場合、ctrl-Cは「^ C」として表示されます)。

LinuxのみUnixライクなOS(最近私は、Solaris、BSD、およびMac OS X上でこれを確認した)んであるように思わない、このように動作し、私は本当にプログラムの割り込みの優れた視覚的な確認としてこれを欠場しますコンソールまたはxtermで。私も長年使ってきた多くのUnixからこのことを懐かしく覚えています。これをLinuxに導入することは、Unixのような標準の動作にさらに準拠させるための良い方法のように思えます。

Linuxがこれをエコーしなかった方法を懐かしく覚えているなら^C、古い動作を取り戻す唯一の方法はカーネルにパッチを当てることです。最近のバージョンでは、シグナル生成文字のエコーは、drivers / tty / n_tty.cの1215-1218行目にあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.