コマンドを貼り付けるときにターミナルの自動実行を停止する

コマンドを貼り付けるときにターミナルの自動実行を停止する

そうですね、これは少し面倒な機能です。何かが起きたり、起きなかったりするので、非常に奇妙です。

引数を微調整するためにターミナルにコマンドを貼り付けると、時々貼り付けた瞬間に実行されます。実行されないこともあります。

これは、恥ずかしいこと(IRC に無意味なコメントを投稿する)から危険なことまで多岐にわたります。

この機能を完全にオフにするにはどうすればいいでしょうか? 貼り付けたときにターミナルが自動的に実行されることは絶対に望んでいません。

答え1

自動実行はありません。コマンドの後に改行 (またはそれ以上) もコピーしている可能性があります。

コマンドを貼り付けるとbreak の場合、シェル (コマンド ライン) は、ユーザーが自分で break (Enter、Return) ボタンをクリックしたと認識します。


この回答は、なぜOPが望ましくない動作をしているのかを説明するだけです。しかし、もう一つの答えは、本当の解決策があるOP の問題に対して。

答え2

1つ本物解決方法は、 で編集モードを開きctrl-x ctrl-e、クリップボードの内容を任意のエディタ (通常は emacs または vim) に安全に貼り付けることです。コマンドの編集が完了したら、保存して終了すると、コマンド ラインで実行されます。これは、長いコマンドや複雑なコマンド、特にコミット ハッシュを git コマンドに貼り付ける場合に適した習慣であり、長期的には恐ろしい結果を回避するのに役立ちます。

エディタはVISUALとEDITOR変数を設定することで変更できます(これらは意味が異なります。ここ)。

答え3

他の人が言っているように、貼り付けたテキストに改行文字が含まれている場合に問題が発生します。その知識があれば、あなたの質問は多かれ少なかれ同じです。これは Server Fault にあります別のサイトなので、ここで回答を繰り返します…

あなたが欲しいものは「括弧付き貼り付け'、一部のシェルで利用可能な機能です。

最新バージョンの bash シェルを使用している場合は、次のようにして現在のセッションで有効にすることができます。

bind 'set enable-bracketed-paste on'

複数の行を貼り付けて試してみましょう。

echo Hello world
echo Again, I say, hello!

シェルはテキストが貼り付けられた(入力されたのではない)ことを認識し、確認のプロンプトを表示して待機します。続行しても問題がない場合は、Enter キーを押します。そうでない場合は、Control-C を押してキャンセルします。

新しいセッションごとに括弧で囲んだ貼り付けを有効にするには、.inputrc ファイルに次のコマンドを追加します。

cd ~
echo "set enable-bracketed-paste" >> .inputrc

もう一つの選択肢は、バッシュ翻訳、括弧で囲んだ貼り付けはデフォルトで有効になっています。現在のシェルを zsh シェルに置き換えるには、次の手順を実行します。

exec zsh

zsh を使用すると、貼り付けたテキストが強調表示されるので便利です。ここでも、Enter キーを押してコマンドを実行するか、Control-C キーを押してキャンセルします。

zsh が気に入っていて、それをデフォルトのシェルにしたい場合は、次のようにします。

chsh -s /bin/zsh

答え4

このエイリアスを使用して貼り付けると、コマンドは実行されません

alias nonewlinepaste='history -s `xsel -b`; sleep 1; xdotool key Up 1>/dev/null'  # xsel ref. https://unix.stackexchange.com/a/96398/17671  # xdotool ref. https://unix.stackexchange.com/questions/267704/command-to-simulate-keyboard-input#comment1038650_267705

関連情報