シェルに貼り付けるときは、末尾の改行文字にコマンドを実行させます。

シェルに貼り付けるときは、末尾の改行文字にコマンドを実行させます。

数ヶ月前にシステム更新のためenterに端末にコマンドを貼り付けたとき、シェルは末尾の改行を解釈できなくなりました。たとえば、lsプロンプトに書き込んでからマウスを使用して行のls最後まで選択した場合は、マウスの中央ボタンをクリックしてシェルに貼り付けてコマンドを実行できたらと思いますls。これは私が長年使ってきた標準的な動作です。

しかし、私のシステムはもはやこれを行いません。を貼り付けることlsができ、改行文字も貼り付けたことがわかります。カーソルが次の行に移動するためです。ただし、それでもコマンドを押すまでコマンドは実行されません enter。アニメーションGIFによって注意が気になることがあります):

説明された効果を示すアニメーション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。もっと混乱しているのはbashzshまたはを使用するとこの問題が発生しfishますが、またはkshを使用するとこの問題が発生しないことです。最後の4つのシェルには私が望む動作があり、貼り付けた行はすぐに実行されます。これは関係があるかもしれませんか?dashtcshcshreadline

目的の動作を復元し、シェルに貼り付けた改行を解釈するにはどうすればよいですか?

ベストアンサー1

RedHatの「バグではない」レポートにキャプチャされた動作の変更https://bugzilla.redhat.com/show_bug.cgi?id=1954366readline設定を参照してくださいenable-bracketed-paste

編集set enable-bracketed-paste Offするには追加してください。.inputrcしかし、そもそも壊れてはいけませんでした。

実際にこの設定を追加すると~/.inputrc問題が解決します。埋め込み改行を貼り付けると、貼り付けたコマンドが再実行されます。

引用する

ここや他の多くの経験豊富なユーザーは、ユーザーにこれを行わないように強く警告します。例えば、@murulu書くコメントからそれ、」私はこれに反対することを強くお勧めします。これにより、誤って壊れたり危険なコマンドを実行したりするのを防ぎます。つまり、Enterキーを押して発生する不快感を補償するという意味です。

おすすめ記事