Macや、ログインした任意のホストのターミナルでの話。
例えば、あるディレクトリへ移動後にコマンド実行など、といったルーチン処理があると思う。
- オプションは全て同じでホストだけ違うMySQLサーバへのログイン処理
- ホストへの特定の鍵を指定してのログイン処理
- etc., etc.
いちいちコマンドを打つのもおっくう。
かといって、alias
で書くには、もう少し応用を効かせたい。
どこか~/bin
とかにスクリプトを書くのもありだけど、簡単なものだったら.bashrc
にさくっと定義してもいいかも。
.bashrcへのスクリプト関数の定義
goto
という疑似コマンドを定義した。名前の理由は、なんとなくそれっぽいのと、タイプするのが楽な文字列だから。
やってることは難しくないと思うので、適当に改変を。
なお、あえてif
でベタに書いている。
デバッグやらで脳みそに負荷をかけたくないのと、一時変数とかの宣言やら何やらがめんどうなので。あと、サンプルとしても解析しやすいだろうから。
case
を適宜使ってもいいかもねしれない。
.bashrcに追記
# --- goto pseudo command ---
goto() {
if [ "x$1" = "xdev" ]; then
cd ~/devel
elif [ "x$1" = "xlog" ]; then
cd ~/var/log
elif [ "x$1" = "xssh" ]; then
if [ "x$2" = "xc" ]; then
ssh cuteyhoney.example.com
elif [ "x$2" = "xp" ]; then
ssh prettywoman.example.com
elif [ "x$2" = "xb" ]; then
ssh -i ./.ssh/id_pub_4aws beautifullife.example.com
fi
elif [ "x$1" = "xdb" ]; then
if [ "x$2" = "x" ]; then # goto db
echo mysql -h develdb.example.com -u hogehoge -p
mysql -h develdb.example.com -u hogehoge -p
elif [ "x$2" = "xtest" ]; then # goto db test
echo mysql -h testdb.example.com -u fugafuga -p
mysql -h testdb.example.com -u fugafuga -p
fi
fi
}
.bashrc
の適当なところに追加したら、保存して、シェルにログインしなおすなりして、(シェルに)適用させよう。
$ goto dev
ちなみに
例文中で、 "x$1" = "xdev"
や "x$2" = "x"
などわざわざx
を書いて条件判断しているのは、エラーを起こさずに判定するため。"$1"="dev"
だと、$1
(つまり1つ目の引数)が空の時にエラーになってしまう。シェルスクリプトの伝統的なTips。
但し書・注意
-
.bash_profile
ではなく、.bashrc
に書こう。(cf. 『本当に正しい .bashrc と .bash_profile の使ひ分け』 ) - 関数名に、既存のコマンドと同じコマンド名をつけて、エイリアスのように機能を上書きする、って手もある。(関数の方が優先される)
- この場合、元のコマンドはフルパスで指定すると良い。
- もう少し複雑な判断とか処理とかが必要ならば、その時はスクリプトを書いた方がいいかもね。
(おわり)