Bash CLI に UTF-8 文字を入力する

Bash CLI に UTF-8 文字を入力する

次のようなファイルを含むディレクトリ リストがあります:

drwxr-xr-x   2 nobody nogroup       4096 2011-01-11 21:06 Капкан
drwxr-xr-x   3 nobody nogroup       4096 2011-11-17 08:40 СБПЧ

このようなファイル名をコピー/貼り付けするか、プロンプトに直接入力すると、Latin-1 文字と同じように操作できると期待しています。

代わりに、次のような結果が得られます。

# Pasting "Капкан"
$ :?апкан 

最初の文字が「 」に置き換えられているのがわかります:?。その後、文字を削除する以外に、文字を左に移動することはできません。キーボードベースの入力でも同じ結果になります。tmuxまたは、screenヤンク/貼り付けでも同じ結果になります。

この状況をどのように診断すればよいかわかりません。これはかなり古い Debian ディストリビューション ( $ uname -a Linux weezy 2.6.37.6.RNx86_32.1.4 #1 Thu Jul 26 04:49:29 PDT 2012 i686 GNU/Linux) ですが、それでも UTF-8 ファイル名を期待どおりに動作させる方法があると思います。

私は OS X を使用しておりTerminal.appTERMに設定されていますxterm-color

これらのファイル名は UTF-8 を使用してエンコードされていると思います。私は Bash 3.1.17 を使用しており、出力は次のとおりですlocale

$ locale
LANG=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8

以下は私の出力です$ locale -a:

C
de_DE.utf8
en_US.utf8
ja_JP.utf8
ko_KR.utf8
nl_NL.utf8
POSIX
zh_CN.utf8
zh_TW.utf8

ru_RU.UTF-8からのインストールを検討しています/etc/locale.genが、 などの基本的なラテン文字でも問題が発生していますá

答え1

上記のコメントのとおり、Terminal.app のEscape non-ASCII characters設定をいじることで問題は解決したようです。ただし、これを正しく動作させるために、どのような調整が必要だったのかについては、まだよくわかっていません。

関連情報