LoginSignup
3
1

More than 5 years have passed since last update.

ATOM用ターミナルプラグイン PlatformIO IDE Terminal でPATHに困った話

Posted at

~/.bash_profile~/.bashrcにPATHの追加設定を書いて、bashの起動時にPATHを自動設定するということを良くやりますが、ATOMのターミナルプラグインであるPlatformIO IDE Terminalを使ってATOM内に起動したシェルのPATHが、iTERM2上のシェルでのPATHと異なってしまい、しばらく苦労してました。

困っていたこと

私は普段~/.bash_profileで、追加したいパスがPATHになかった場合のみ追加するという処理を書いています。

.bash_profile
gnubin_path=/usr/local/opt/coreutils/libexec/gnubin

echo $PATH | grep -q $gnubin_path > /dev/null 2>&1

if [ $? -ne 0 ]; then
  export PATH=$gnubin_path:$PATH
fi

iTERM2でシェルを起動したとき、PATHは以下のようになっていました。

$ echo $PATH
/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

この状態だと、例えばlsコマンドは/usr/local/opt/coreutils/libexec/gnubin/lsのバイナリを使用します。

$ which ls
/usr/local/opt/coreutils/libexec/gnubin/ls

しかし、ATOM内のシェルでは以下のように/usr/local/opt/coreutils/libexec/gnubinが後ろに来てしまっています。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/opt/coreutils/libexec/gnubin

この状態だと、lsコマンドは/bin/lsのバイナリを使用してしまいます。

$ which ls
/bin/ls

原因

bashは親プロセスの環境変数を子プロセスに引き継ぎます。
ATOMプロセスのPATHが/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinになっていると、その子プロセスとなるATOM内シェルのPATHには/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/opt/coreutils/libexec/gnubinが引き継がれます。
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinはbashの終了時にPATHから削除され、bashの起動時に自動的にPATHの先頭に追加されるようです。

この状態で.bash_profileが実行されるので、すでに該当のパスが存在していると判断されて、export PATH=$gnubin_path:$PATHが実行されません。

解決方法

ATOM内シェルの時のみ、PATHを初期化するという処理を.bash_profileに加えてあげれば良いです。
現在のシェルがATOM内シェルかどうかは、親プロセスのコマンドにplatformio-ide-terminal/lib/process.coffeeが含まれているかどうかで判断しています。

.bash_profile
ps u -p $PPID | grep 'platformio-ide-terminal/lib/process.coffee' > /dev/null 2>&1
if [ $? -eq 0 ]; then
  export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
fi

gnubin_path=/usr/local/opt/coreutils/libexec/gnubin

echo $PATH | grep -q $gnubin_path > /dev/null 2>&1

if [ $? -ne 0 ]; then
  export PATH=$gnubin_path:$PATH
fi

これでATOM内シェルでも以下のPATHが設定されます。

/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
3
1
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
3
1