bashでの複数行の貼り付けを防止する


10

私はよくctrl+cguiアプリケーションからテキストをコピーし、右マウスクリックメニューを使用してターミナルエミュレーター(ターミネーター)に貼り付けて貼り付けます。クリップボードに複数の行が含まれていることを忘れることがあります。bashに貼り付けると、各行が「実行」されます

複数行の貼り付けを完全に防ぐための解決策はありますか?


まずメモ帳に貼り付けて内容を確認し、問題がない場合はアプリケーションに貼り付けてください
Skaperen

1
bashでコマンドを実行し、sleep 999999問題がなければペーストを実行します。sleepコマンドは行を読み取らず、を押すとそれらは破棄されますctrl+c
Skaperen



1
@Otheus、printf '\e[?2004h'ほとんどのxtermライクな端末エミュレータでは、アプリケーションが貼り付けの開始位置と終了位置を検出できるように、端子が貼り付けられたテキストを括弧で囲むブラケット貼り付けモードを有効にします。xterm \e[?2005hは、貼り付けられたすべての文字に接頭辞が付けられる別のモードもサポートします^V(多くのアプリケーションとtty回線の分野ではと理解されていますlitteral-next)。
ステファンChazelas

回答:


5

この回答は、ユーザーの質問に最も具体的ではありません。私の2番目の回答を参照してください。これは、より一般的な問題に対処するため、ここに残します。

あなたの最初の投稿にコメントあたり、あなたがサポートする端末エミュレータ(1)必要貼り括弧の端末で実行されているものは何でものためのサポートを、対応する(2)と、すなわち、vimbashzsh。括弧付きの貼り付けをサポートする端末エミュレーター(この投稿へのコメントに基づいて更新されるリスト):

  • xterm -以来?
  • gnome-terminal -以来?
  • putty -0.63以降(2013-08-06リリース日)

ブラケットモードをサポートするアプリケーション:

  • vim
  • zsh

についてbash、StéphaneChazelasは、そのモードの検出を容易にし、適切なアクションを実行するためのシェルスクリプトをまとめました。

より具体的な答え-行が途切れるのを防ぐ-は、貼り付けを押したときに実行されているUNIXプログラムについて知らなければ答えられません。

多分あなたが必要とするクリップボードマネージャー


そこにあるスクリプトは角かっこ貼り付けを検出しません。これは、アプリケーションが^ Vをリテラルネクストとして理解する必要があることを除いて、アプリケーションでのサポートを必要としない角かっこ貼り付けの3番目の形式をエミュレートするPerlスクリプトです(そのスクリプトは実際にこの質問に答えますが、おそらく改善が必要ですが、それは単なるPoCでした)。
ステファンChazelas

@StéphaneChazelasは私の投稿を自由に編集/改善してください。:)「アプリケーションが理解する必要がある^Vとして、literal-nextしかし、どのように行います。^Vアプリケーションの入力ストリームに入るの?
Otheus

内部の ttyデバイスがicanonモードでない場合はそれを取得します(bashreadlineのプロンプトがそれを見る(そしてそれをリテラル-次として扱う)のように)。icanonモードの場合、Ctrl-V Xを手動で入力したときと同じように、内部のttyデバイスの回線制御が(lnext文字がである限り)ストリップされ^Vます。
StéphaneChazelas

1
そのスクリプト^Vを使用しない場合、xtermのquoted pasteモード(を送信することで有効化\e[?2005h)を使用しない限り、何も挿入されません。このperlスクリプトは、複数行の貼り付けの最初の行を除くすべてを削除するように調整できます(ただし、大きな貼り付けの場合は確実ではありません)。readlineの改行を引用するため(Ctrl-を押したかのように) V Ctrl-J)、行が実行されないようにします(行は編集バッファーに追加されただけで、Enterキーを押して実行する必要があります)。
ステファンChazelas

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