ファイル名に絵文字を使用してコマンドラインでアクセスしたいのですが、ls
で機能させることができないようです。奇妙なことに、他のプログラムにパイプすると、絵文字が正しく表示されます。
$ ls
? tmp 我很好,谢谢
$ ls --color
? tmp 我很好,谢谢
$ ls | cat
????
tmp
我很好,谢谢
$ ls | xargs
???? tmp 我很好,谢谢
$ ls | column
???? tmp 我很好,谢谢
$ ls | awk '{print $1}'
????
tmp
我很好,谢谢
私はGNU coreutils8.23を使用しています。
これが私のロケール情報です:
[LOCAL] vagrant@vagrant ~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
何がこの振る舞いを引き起こすのか、そして私がどのようにプレーンな 'ol ls
をls | xargs
この状況では?
答えはls
のマニュアルページにあります。
--show-control-chars
show non graphic characters as-is (default unless program is 'ls' and output is a terminal)
ls
コマンドが特別に扱われる理由を理解するために、さらに詳しく調べる必要がありますが、その引数には????が表示されます。 ls
を使用する場合。