LoginSignup
0
2

More than 3 years have passed since last update.

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

Posted at

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として定義しているだけです。

0
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
0
2