LoginSignup
1
2

More than 5 years have passed since last update.

ターミナルで使う自分用のショートカット・コマンドを作ろう

Last updated at Posted at 2016-12-08

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 の使ひ分け』 )
  • 関数名に、既存のコマンドと同じコマンド名をつけて、エイリアスのように機能を上書きする、って手もある。(関数の方が優先される)
    • この場合、元のコマンドはフルパスで指定すると良い。
  • もう少し複雑な判断とか処理とかが必要ならば、その時はスクリプトを書いた方がいいかもね。

(おわり)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2