.bashrcを使いこなしたい
最近.bashrc
の関数機能を知って感動したので、備忘録として残しておく。
.bashrcとは
シェル(bash)の設定ファイルで、ターミナルを開くたびに自動で読み込まれる。環境変数の設定やエイリアスの定義、そして関数の定義ができるアレのこと。
よく使うのは環境変数の追加先ですよね。bashを開いてこんな感じのことを打つ! っていう説明とかをよく見かける。ただ、bashで打つだけで終わってしまうけど。
この設定したものがどこに記載されているかというと、~/.bashrc
なのだ。
1 2 |
export NODE_ENV=development export PATH=$PATH:/usr/local/bin |
私が最近知った関数は、bashで動く関数なのでJSとかの関数よりも独自コマンドっぽい印象を受けた。
関数の定義方法。
- .bashrcに関数を書く
123function 関数名() {# 処理内容} source ~/.bashrc
をbashでたたき、.bashrcの変更を反映する
たとえばこんな関数
ディレクトリを作成して、移動。普通だったら、mkdir xx
して、cd xx
と2ステップになる。
1 2 3 |
function mkcd() { mkdir -p "$1" && cd "$1" } |
この関数を登録すれば、mkcd xx
の1ステップでディレクトリ作成&移動ができる。
条件分岐も使える
会社ではあまり同意を得られなかったのだが、案件によってパッケージマネージャーがnpm
なのかyarn
なのかpnpm
なのかバラバラだったりして、迂闊なのでyarn.lockを目にしているのにnpm iしてロックファイルを増やしちゃったりすることがまれによくある。
なので、もう己の目と頭は信用しない。bashに勝手に判定してもらいたい!というときにこの関数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
function detect_package_manager() { if [ -f "pnpm-lock.yaml" ]; then echo "pnpm" elif [ -f "yarn.lock" ]; then echo "yarn" else echo "npm" fi } function pinstall() { local pm=$(detect_package_manager) if [ $# -eq 0 ]; then $pm install else if [ "$pm" = "yarn" ]; then $pm add "$@" else $pm install "$@" fi fi } function pdev() { local pm=$(detect_package_manager) if [ "$pm" = "npm" ]; then npm run dev else $pm dev fi } function pbuild() { local pm=$(detect_package_manager) if [ "$pm" = "npm" ]; then npm run build else $pm build fi } function prun() { local pm=$(detect_package_manager) if [ "$pm" = "npm" ]; then npm run "$@" else $pm "$@" fi } |
これはパッケージマネージャーは3つだけど、もちろんもっと増やせる。(複数のロックファイルは考慮していない)
注意!
関数の命名は慎重に!
testとかやると、それはそれは大変なことが起こるよ!(起こった)