shellをもっと便利に ~cd時に自動でgit fetchを実行~

2021/12/08に公開約1,300字

この記事はN・S高等学校 Advent Calendar 2021 8日目の記事です。

突然ですが、みなさん必ず一度はGitを使ったことがあると思います。そして、pullを忘れてpush時に警告が出たことがあると思います。(筆者はしょっちゅうやらかします…)

そこで、

「プログラマたるもの面倒臭いことはコンピューターにやらせるべき」

という私のポリシー(?)に基いてcdコマンドを改造したので、そのことを書いていきます

完成したコード

cucd(){

builtin cd $1

if [ -d "${PWD}/.git" ]; then
    echo "This directory is git directory!!! \n Now fetching..."
    command git fetch
fi
}

そんなに難しいことはありません。ですがshell scriptを書く上でのポイントがいくつかあるので解説していきます。

ifの条件

まず、if文の条件は「カレントディレクトリに.gitディレクトリがあるか」を判定しています。

条件のなかに -dというオプションがありますが、これを指定することで評価対象をディレクトリに制限しています。

-d以外にも以下のオプションがあります。

オプション 説明
-f 普通のファイルなら真
-s サイズが 0 より大きければ真
-e 存在するなら真
-r 読み取り可能なら真
-w 書き込み可能なら真
-x 実行可能なら真

https://qiita.com/wakayama-y/items/a9b7380263da77e51711 より引用

builtin

まず前提として、この関数は cdにエイリアスを貼ります。

しかし、関数内でcdを呼び出しています。

これでは永遠にループしてしまいcdの機能が働きません。
そこで、ただ単にcd $1とするのではなくbuiltin cd $1とします。

実はcdコマンドは他のコマンドと違い、shell(bash,zsh...)が提供する機能です。(これbuiltin commandと呼びます)

詳しく知りたい方は以下をご覧ください

https://atmarkit.itmedia.co.jp/ait/articles/1710/19/news031.html

builtinと明示することでエイリアスではない本来のcdが実行されます。

おわりに

shell scriptが書けるようになると日々の業務を自動化できるようになるので、この記事が誰かのshell scriptをはじめるきっかけになれば嬉しいなと思います。

Discussion

ログインするとコメントできます