ls
コマンドの --color
オプションの挙動が自分の認識と違っていたので、メモ。
ls
コマンドに --color
オプションを指定すると、出力時に、ファイルタイプ(ディレクトリとかシンボリックリンクとか)によって色づけ(ハイライト)してくれます。
普段の作業にはとても便利な機能なので、シェルの alias 設定で指定している人も多いのではないでしょうか。
ただ、この --color
オプションを使うにあたって、ひとつだけ注意しなければなりません。
ls
コマンドの出力をパイプにつないでワンライナーを書く時に、ハイライト機能が有効になっていると正しく動きません。
/bin/ls --color | xargs -d '\n' -n 1 hogehoge.pl
この対策として、--color=auto
と指定しておくと、出力先が端末(ターミナル)でない場合にハイライト機能を無効化してくれます。とても便利。
で、Seaoak の認識では、単に --color
と指定した場合は
--color=auto
になると思っていました。しかしながら、Ubuntu 16.04.1 LTS や Git for Windows (2.10.2) では、
--color
は --color=always
と解釈されるのでした。ちゃんと man にも明記されています。
--color[=WHEN]
colorize the output; WHEN can be 'always' (default if omitted),
'auto', or 'never'; more info below
おそらくですが、ls | less -R
としたときにハイライト機能を有効にしたい、というのが理由と推測されます。
以上の結論として、「ワンライナーを書く時は \ls
または /bin/ls
と書きましょう」ということになります。
おまけ
ちなみに、似たような便利機能で -F
オプションがあります。ファイルタイプによって末尾に /
とか @
とか *
とか付けてくれる機能です。こちらは出力先が端末か否かに関係なく常に有効になります。よって、ワンライナーを書く時は、やっぱり \ls
または /bin/ls
と書くのが確実です。
おまけ2
grep
コマンドにも --color
オプションがあります。こちらは単に --color
と指定すると --color=auto
と解釈されるようです。
man やヘルプには明記されていませんが、
Ubuntu 16.04.1 LTS や Git for Windows (2.10.2) で試すとそうなります。統一感が無いですね・・・・。
おまけ3
git
コマンドの grep
で --color
と指定した場合は --color=always
と解釈されます。man git-grep
参照。