サーバー運用や開発でAmazon Linuxを使っている皆さん、こんにちは!
今回は、Amazon Linux 2023で私が実際に遭遇した、少し厄介な問題とその解決方法についてお話しします。もしあなたが「なぜかコマンドが実行されない」「貼り付けたテキストに変な文字が付く」といった謎の挙動に悩まされているなら、この記事がきっと役に立つはずです。
問題の発生
最近、Amazon Linux 2023で新しいサーバー環境を構築しました。いつも通り、ローカルのPCで書いたスクリプトやコマンドをコピー&ペーストして作業を進めていたのですが、ここで奇妙な現象に遭遇しました。
【具体的な現象】
- ターミナルにコマンドを貼り付けても、一向に実行されない。ただ、カーソルが点滅したまま、実行待機状態になってしまう。
- 時々、貼り付けた文字列の前後になぜか見慣れない文字(
\001
とか\002
といった制御文字)が付いてしまう。
最初は「何か設定を間違えたかな?」と思いましたが、何度も確認しても原因が分かりません。以前使っていたAmazon Linux 2ではこんな問題は一度も起きたことがなかったので、とても困惑しました。
原因は「Bracketed Paste Mode」だった! 🕵️♀️
この謎の現象の原因、それは新しいバージョンのシェルに導入された**「Bracketed Paste Mode(ブラケット貼り付けモード)」**という機能でした。
「Bracketed Paste Mode」とは?
この機能は、貼り付けたテキストが手入力されたものか、クリップボードから貼り付けられたものかをシェルが区別するためのものです。これにより、例えば貼り付けたスクリプト内に含まれる改行コードを検出し、予期せぬコマンド実行を防ぐといったセキュリティ上のメリットがあります。
しかし、この機能が有効になっていると、貼り付けられた文字列の先頭と末尾に特殊な制御文字が付加されます。これが原因で、シェルがコマンドとして正しく認識できず、実行されないという現象を引き起こしていたのです。特に、sh
や bash
といった特定のシェル環境でこの問題が発生しやすいことがわかっています。
確認してみよう!
あなたの環境で「Bracketed Paste Mode」が有効になっているかを確認するには、以下のコマンドを実行します。
bind -v | grep enable-bracketed-paste
もし、出力結果に on
と表示されたら、この機能が有効になっています。
解決策:無効化するも、ひと筋縄ではいかない… 😤
問題の原因が分かったので、次はこれを無効化すればいいだけ…と思いきや、ここでもうひとつの落とし穴がありました。
試したけど失敗した方法
「Bracketed Paste Mode」を無効化するために、私は以下のコマンドを試しました。
set enable-bracketed-paste off
これで無効になるはず!と思い、先ほどの確認コマンドを実行してみると…
bind -v | grep enable-bracketed-paste
出力結果は相変わらず on
のまま!
なぜ?と調べてみると、この set
コマンドは現在のセッションに対してのみ有効であり、シェルを再起動したり、新しいセッションを開いたりすると設定が元に戻ってしまうことがわかりました。つまり、この方法では根本的な解決にはならないのです。
最終的な解決策!永続的に設定を無効化する
では、どうすればこの設定を恒久的に無効化できるのでしょうか?
正解は、ユーザーの初期設定ファイルである**.inputrc
**に設定を書き込むことでした。.inputrc
は、コマンドラインの読み込み(readline
)に関する動作をカスタマイズするためのファイルです。
以下のコマンドを実行することで、この設定をファイルに書き込みます。
echo "set enable-bracketed-paste off" >> ~/.inputrc
このコマンドは、~/.inputrc
というファイルに "set enable-bracketed-paste off"
という文字列を追記します。
設定の反映方法
この設定を反映させるには、一度サーバーからログアウトし、再度ログインし直す必要があります。
exit
コマンドでサーバーからログアウト。- 再度、SSHなどでサーバーにログインし直す。
これで、先ほどの確認コマンドを実行すると…
bind -v | grep enable-bracketed-paste
出力結果が off
になっているはずです!
この設定を施した後は、問題なくコマンドやスクリプトをコピー&ペーストできるようになりました。もう、コマンドが実行されずにイライラすることはありません。
まとめとポイント
今回はAmazon Linux 2023で発生する、コマンドの貼り付けに関する問題とその解決策について解説しました。
【今回のポイント】
- 原因は「Bracketed Paste Mode」:Amazon Linux 2023の新しいシェル環境に導入された機能が、貼り付けられたテキストを正しく認識できず、コマンドの実行を妨げていた。
.inputrc
ファイルに設定を永続化:一時的なset
コマンドではなく、ユーザーのホームディレクトリにある.inputrc
ファイルに設定を書き込むことで、恒久的に「Bracketed Paste Mode」を無効化できる。- 設定反映には再ログインが必要:
.inputrc
の変更を反映させるには、一度ログオフし、再度ログインする必要がある。
新しいOSや環境に移行すると、以前とは異なる仕様や挙動に遭遇することがあります。今回の記事が、同じ問題に直面した誰かの助けになれば幸いです。