数ヶ月前にシステム更新のためenterに端末にコマンドを貼り付けたとき、シェルは末尾の改行を解釈できなくなりました。たとえば、ls
プロンプトに書き込んでからマウスを使用して行のls
最後まで選択した場合は、マウスの中央ボタンをクリックしてシェルに貼り付けてコマンドを実行できたらと思いますls
。これは私が長年使ってきた標準的な動作です。
しかし、私のシステムはもはやこれを行いません。を貼り付けることls
ができ、改行文字も貼り付けたことがわかります。カーソルが次の行に移動するためです。ただし、それでもコマンドを押すまでコマンドは実行されません enter。アニメーションGIFによって注意が気になることがあります):
上記のアニメーションでは、作成したls
行を選択して選択を解除し、ls
マウスの中央ボタンをクリックして貼り付けることを確認できます。カーソルが次の行にどのように移動するかを確認してください。ただし、コマンドはその時点で実行されず、キーをls
押した後にのみ実行されます。enter
本当に奇妙なことは、これが私の端末エミュレータ(terminator
)の問題ではないということです。別のコンピュータにsshを接続すると(localhostにsshを接続していない場合)、同じ端末が期待どおりに改行文字を解釈します。したがって、私のローカルシェルには一種の設定が必要です。
しかも期待通りに動作する環境が一つありますが、まさにread
内蔵環境です。ここで、末尾の改行を含む行を選択すると、それをスタンバイプロンプトに貼り付けることができ、末尾のread
改行はEOL文字として処理されてread
返されます。では、特定の環境の外ではなぜ動作しませんか?
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
これはすべてinモードを使用するArch Linuxシステムにありますemacs
。もっと混乱しているのはbash
、zsh
またはを使用するとこの問題が発生しfish
ますが、またはksh
を使用するとこの問題が発生しないことです。最後の4つのシェルには私が望む動作があり、貼り付けた行はすぐに実行されます。これは関係があるかもしれませんか?dash
tcsh
csh
readline
目的の動作を復元し、シェルに貼り付けた改行を解釈するにはどうすればよいですか?
答え1
RedHatの「バグではない」レポートにキャプチャされた動作の変更https://bugzilla.redhat.com/show_bug.cgi?id=1954366、readline
設定を参照してくださいenable-bracketed-paste
。
編集
set enable-bracketed-paste Off
するには追加してください。.inputrc
しかし、そもそも壊れてはいけませんでした。
実際にこの設定を追加すると~/.inputrc
問題が解決します。埋め込み改行を貼り付けると、貼り付けたコマンドが再実行されます。
引用する
- https://bugzilla.redhat.com/show_bug.cgi?id=1954366
- 括弧貼り付けモード- コンラッド・オーウェン(Conrad Owen)、2013年4月
ここや他の多くの経験豊富なユーザーは、ユーザーにこれを行わないように強く警告します。例えば、@murulu書くコメントからそれ、」私はこれに反対することを強くお勧めします。これにより、誤って壊れたり危険なコマンドを実行したりするのを防ぎます。つまり、Enterキーを押して発生する不快感を補償するという意味です。」