alias を利用した小技
「alias(エイリアス)は漢らしくない」と言って憚らない人がいます。 alias を設定するなぞ、軟弱者の所業だと言うのです。 しかしながら、「高機能シェル」と呼ばれるシェルが全て alias の機能を備えていることを考えると、alias は万人にとって有益なものであるし、 生産性を高める機能であると思うのです。 というわけで、ここでは Cygwin 環境で設定しておくと便利かもしれない alias 群を紹介します。
alias の設定に関する注意
Cygwin の標準シェルは bash となっています。 C シェル系に慣れている人は必ず一度は嵌るのですが、 bash での alias 設定方法は C シェルとは異なり、 alias とその定義の間に「=」が入ります。 また、bash の alias 定義には引数を含めることは出来ません (引数を含める場合はシェル関数を使用します)。
また、.bashrc の改行コードが DOS / Windows で使用される
CR/LF 形式だと、bash は .bashrc を読み込むことが出来ません。
時々、これに嵌る人がいます。
alias を利用したごくささやかな技
ls で日本語の文字を表示する
alias ls='ls --show-control-chars'
Cygwin の ls(というよりも、GNU の ls)は、8 ビット文字を「非表示文字」として表示しないような仕様になっています。
そのため、「非表示文字」を強制的に表示させるための「--show-control-chars」を指定しているわけです。
以下に例を示します。
$ ls --show-control-chars
日本語.txt
$ ls
???{??.txt
勿論、ls の alias として「-a」や「-t」、或いは「-F」を付けたい人は、
「alias ls='ls -F --show-control-chars'」などとして下さい。
ls の出力に色を付ける
alias ls='ls --color=auto'
ファイルの種類に応じて、ls の出力に色が付きます。 Cygwin に限った話ではなく、UNIX 系 OS でも一般的に使われている alias 設定です。
この色付けは適宜エスケープシーケンスを吐き出すことによって行っているのですが、
単純に「ls --color」とやってしまうと、
パイプ処理やファイルへのリダイレクト時にもこのエスケープシーケンスが出力されてしまい、悲しい目に遭います。
そこで「ls --color=auto」として色付けを端末に限定しているわけです。
「--color=auto」の代わりに「--color=tty」でも OK です。
別のコマンドプロンプトを開く(NT/2000 のみ)
alias start='cmd.exe /c start'
start コマンドはコマンドプロンプト(cmd.exe)の組込みコマンドで、 別のコマンドプロンプトを実行するというコマンドです。 コマンドプロンプトの組込みコマンドなので、bash 上からは start コマンドは使用出来ません。 そのため、cmd を挟んで実行しているというわけです。 なお、2000 以前の NT では cmd の代わりに cmdproxy を使う必要があるかもしれません。
「cmd /c」という技は「bash 上から cmd.exe の組込みコマンドを利用する」という場合に有効です。例えば、
alias c='cmd.exe /c'
としておけば、「c copy a.txt b.txt」で a.txt を b.txt にコピーすることが出来ます。
Cygwin を使うような人がどれだけ MS-DOS 由来のコマンドを使うか、疑問といえば疑問ですが。
less を more っぽく見せたい場合
alias more="less '-E -P?f--More-- (%pb\%):--More--.'"
less よりも more のほうが慣れているが、more の低機能さにはほとほと嫌気が差している場合に使う技です。
任意の場所でエクスプローラを開く
function explorer_wrapper {
explorer $2$(cygpath -w -a $1)
};
function e {
if [ $# -eq 0 ]; then
target=.
else
target=$1
fi
explorer_wrapper $target
};
function eh {
if [ $# -eq 0 ]; then
target=.
else
target=$1
fi
explorer_wrapper $target '/e,'
};
function er {
if [ $# -eq 0 ]; then
target=.
else
target=$1
fi
explorer_wrapper $target '/e,/root,'
};
「e パス名」で、指定したパスをエクスプローラで表示します。
また、「eh パス名」ではフォルダビュー付きで、「eh パス名」
では現在位置をフォルダビューのルートとして、エクスプローラを開きます。
引数としてパスを指定しなかった場合は、カレントディレクトリが指定されたものとして扱います。
これは見ての通り alias ではなく、シェル関数を用いて定義しています。コード中で利用している
「$(cygpath -w $1)」は、昔ながらの記述方法に従えば「`cygpath -w $1`」です。
しかし、個人的にはもう「`コマンド`」という書式は obsoleted でもいいと思っています。
「` `」の入れ子が出来ないからです。
この技のポイントは「e index.html」を実行することにより、Internet Explorer
を使って HTML ファイルを開くことが出来るというところにあるかもしれません。