条件つき alias

extags を ctags に alias するといった、元々存在するコマンドに alias するということは、頻繁とはいかなくともぼちぼちある。vim と vi とか。

こんなとき .bashrc をいくつかのマシンで共有していると、 "ctags がある状態で ctags を extags の alias にしているのだけど、マシン B だけは extags がない" みたいなことがある。マシン B の状態で ctags を実行しようとすると、存在しない extags を実行しようとして command not found となる。

こんなときは hostname で alias するかどうかを切りかえるか、extags が有効なコマンドの場合だけ alias するかの手段が手取り早い。

以下はその後者の例。bash でしか試してないので bash ってことで。

#!/usr/bin/env bash

conditioned_alias() {
    # 引数チェック
    if [ -z "$1" -o -z "$2" ]
    then
        exit 1
    fi
    # 第二引数が有効なコマンドかどうかチェック
    if [ -x "`which $2`" ]
    then
        if [ -n "$3" ]
        then
            alias "$1"="$3"
        else
            alias "$1"="$2"
        fi
    fi
}

conditioned_alias vi vim
conditioned_alias ctags exctags
conditioned_alias mount_foo mount_foo.sh 'sudo mount_foo.sh'

3 つ目の引数がある場合には、"第 2 引数が有効なコマンドの場合だけ、第 1 引数を第 3 引数の alias にする" という動作になる。

まぁ、extags とか vim って打てよって話なのだけど。