shellをもっと便利に ~cd時に自動でgit fetchを実行~
この記事は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と呼びます)
詳しく知りたい方は以下をご覧ください
builtinと明示することでエイリアスではない本来のcd
が実行されます。
おわりに
shell scriptが書けるようになると日々の業務を自動化できるようになるので、この記事が誰かのshell scriptをはじめるきっかけになれば嬉しいなと思います。
Discussion