Bashで複数コマンドを1つのエイリアスに設定する方法

このページでは例としてmkdircdを1コマンドで実行できるようにしたいと思います.

通常,一つのコマンドをエイリアスを設定するときは,このように書きます

$ alias md='mkdir $1'  # ${n}は第n引数
$ md -v testdir
mkdir: created directory 'testdir'

しかし,2つのコマンドをこれに倣って書いてみるとおかしなことになります.

$ alias md='mkdir -v $1 && cd $1'
mkdir: missing operand
Try 'mkdir --help' for more information.

何が起きているのかというと

$ alias ec='echo "1:$1" && echo "2:$1"'
$ ec hello
1:
2: hello

このように1つ目のコマンドの引数がうまく取れていないことが分かります.

これを避けるためには,エイリアスではなく,Bashの関数を使います.

$ pwd
/home/akh
$ function md() {
>   mkdir $1 && cd $1
> }
$ md testdir
$ pwd
/home/akh/testdir

後はこれを.bashrcに書き込めばいつでも使えるようになります.

function md() {
    mkdir $1 && cd $1
}
Tweet