Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2912

BASHで簡単にPATHを追加する関数

$
0
0

BashでPATHに実行ディレクトリを追加する処理を.profile(.bash_profile)や.bashrcに追加するときに便利なshell関数をメモしておきます。.profile(.bash_profile)とかに追加して使ってもらえれば幸いです。

仕様

  • 指定されたディレクトリが存在し、
  • すでにPATHに含まれていないとき、
  • PATHの(前|後ろ)に指定ディレクトリを追加してexportする。

ちゃんとPATHにふくまれてないかチェックするので.bashrcにこれらの関数でPATHを追加しても安心。(チェックしてないで.bashrcに書いてしまうとbashを入れ子で起動するたびにPATHに追加されてしまう)

addpath.sh
# 指定されたディレクトリをPATHの前に追加(pre)
addpathp (){[!-d$1]||[-z"${PATH##*$1*}"]||export PATH=$1:$PATH}# 指定されたディレクトリをPATHのあとに追加(after)
addpatha (){[!-d$1]||[-z"${PATH##*$1*}"]||export PATH=$PATH:$1}# 例
addpathp ~/.local/bin  # .local/binが存在し、すでにPATHに存在しないなら、それをPATHに追加
addpatha ~/.cargo/bin
addpatha ~/go/bin
addpatha /usr/local/go/bin
addpathp ~/bin

解説

こういったPATH追加関数は過去に何度も再発明されていますが、超短いので邪魔にならないのが自慢です。

あとの説明は蛇足ぎみですが書いておきます。なんにも考えないでコピーして使えばよいですw

テクニカルな解説

Bashの関数については「Shellの基本を学ぶ(7)関数」に解説があります。

[ ! -d $1 ] ||

ディレクトリが存在しないとき、test( [ )コマンドはTRUEになるので、||以降のコマンドを実行しません。こういう [...] || ... , [...] && ... というif文を使わないパターンはshell scriptでは定石ですね。

[ -z "${PATH##*$1*}"]

変数置換については「bashの変数内文字列置換まとめ」とかググってみてください。このケースでは指定したディレクトリがPATH変数の中に存在する場合、空文字列となり全体はTRUEになり||以降を実行しません。存在しないとき||以降を実行します。

残り

PATHを加工して前につける関数をaddpathp、後ろにつける関数をaddpathaとして定義しているだけです。


Viewing all articles
Browse latest Browse all 2912

Trending Articles