ツッコミ歓迎.
まずは現状での最終形態
以下のようなシェルスクリプトを作成:
#!/bin/sh
. /etc/profile
. 共有したいPATHを記述した設定ファイル
FISH_PATH_TMP=$PATH /usr/local/bin/fish --init-command='set PATH $FISH_PATH_TMP' "$@"
これをデフォルトシェルに設定する.
※ ここでは /etc/profile
は変更されていないものとする.
※ 「共有したいPATHを記述した設定ファイル」は他シェルの設定ファイルでも読み込まれるようにしておくこと.
どうしてこうなった?
- fish は Bourne Shell 系ではないので,
PATH
の設定ひとつとっても書式が違う. よって単純に設定ファイルの分割だけでは共有できない. - でも親シェルで設定した環境変数は引き継ぐので, fish をサブシェルとして起動すれば
PATH
を引き継げる. - しかし macOS の場合, その方法だと
/usr/bin
などの標準的なものより優先したいパスがある場合もサブシェルとして fish が起動した際に/etc/paths
が再読込されてしまい, 元のパスが後ろに来てしまう. - なので, 一旦
PATH
を別の環境変数に退避し, fish 起動後に復元している.