🔍
𝕏📘📖☁️

ターミナルでペーストしたら不要文字(0~,1~)が入ってしまった時の対処法 💻

SSH でリモートホストに接続してターミナルに文字をペーストした際に、不要な文字が入ってしまう問題の解決方法をご紹介します 🖥️

問題の症状

とあるホストに SSH 接続して、Windows Terminal でコマンドをペーストすると、以下のように不要な文字が挿入されてしまいました:

$ 0~ls -l1~
bash: 0~ls: command not found

ペーストした文字の前後に 0~1~ という文字が追加されてしまい、コマンドが正常に実行できません 😵

原因

この問題は、ターミナルが bracketed paste mode(ブラケットペーストモード)になっていることが原因です 🔍

bracketed paste mode は、ペーストされたテキストを特別な制御文字で囲むことで、ペーストされた内容と手動で入力された内容を区別する機能です。

解決方法

以下のコマンドを実行して、bracketed paste mode をオフにします:

printf "\e[?2004l"

このコマンドを実行すると、ペースト時に不要な文字が挿入されなくなります ✅

恒久的な解決方法

毎回コマンドを実行するのが面倒な場合は、.bashrc.zshrc に以下を追加します:

# bracketed paste mode を無効化
printf "\e[?2004l"

bracketed paste mode について

bracketed paste mode は本来、以下のような利点があります:

  • ペーストされたコードの自動実行を防ぐ 🛡️
  • 大量のテキストをペーストする際の安全性向上
  • エディタでのペースト時のインデント崩れを防ぐ

ただし、環境によっては今回のような問題が発生することがあります。

まとめ

SSH 接続時のペーストで不要な文字が入る場合は、bracketed paste mode が原因の可能性が高いです 💡 上記のコマンドで簡単に解決できるので、同様の問題に遭遇した際はお試しください。

参考文献

関連記事