Skip to main content.

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 ファイルを開くことが出来るというところにあるかもしれません。