回答:
Bashを使用して/ etc / profileおよび〜/ .profileを解析し、fishを起動できます。
/usr/local/bin/fishloginコンテンツで作成
#!/bin/bash -l
exec -l fish "$@"
実行可能にする
sudo chmod +x /usr/local/bin/fishlogin
/ etc / shellsに追加します
echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
デフォルトのシェルとして設定します
sudo usermod -s /usr/local/bin/fishlogin $USER
usermod -s /usr/local/bin/fishlogin $USERはchsh -s /usr/local/fishlogin $USER
chsh: /usr/local/bin/fishlogin: non-standard shellにそれを追加する必要があります/etc/shells
fish "$@"は、に置き換えてくださいexec -l fish "$@"。execbashプロセスをfishに置き換えますが、fishの-l原因argv[0]は-fishであり、これはログインシェルであることを通知します。
私の現在のソリューション(より新しいバージョンについてはこちらをご覧ください):
egrep "^export " ~/.profile | while read e
set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)\$/\1/")
set value (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)\$/\2/")
# remove surrounding quotes if existing
set value (echo $value | sed -E "s/^\"(.*)\"\$/\1/")
if test $var = "PATH"
# replace ":" by spaces. this is how PATH looks for Fish
set value (echo $value | sed -E "s/:/ /g")
# use eval because we need to expand the value
eval set -xg $var $value
continue
end
# evaluate variables. we can use eval because we most likely just used "$var"
set value (eval echo $value)
set -xg $var $value
end
よりクリーンなソリューションを得るには、外部envプラグインを使用できます。
fenv source ~/.profile
魚でbashコマンドを実行するプラグインであるbassを使用できます。
$ git clone https://github.com/edc/bass.git
$ cd bass
$ make install
そして、あなたのにこれを入れてくださいconfig.fish:
bass source ~/.profile
.profileあまりにも多くのことが起こっているのはあなたのせいです。
bass一方、bashシェルスクリプトを解釈し、魚で実行するようにします。それは確かにもう少しオーバーヘッドがありますが、私の経験では完全に無視できますが、あなたの走行距離は異なるかもしれません。
私は、魚のスタートアップで.profileを調達しようとしましたが、それは私にとって魅力的なものでした。
ただやる:
echo 'source ~/.profile;clear;' > ~/.config/fish/config.fish
端末またはiterm2を再起動して、テストするエイリアス.profileをテストします。
注:fish-credit @erbでは使用できない構文を使用するより複雑な.profileファイルでは機能しません
.profilefishでは使用できない構文を使用するより複雑なファイルでは機能しません。
できません。fishの構文は、Bourneシェル(/bin/sh)構文とは異なります。これは、あなたが使用することはできません同じ理由である.profileような他の非ボーン由来シェル、とcshとtcsh。
ディストリビューションがPAMを使用している場合、~/.pam_environmentファイルに環境変数を設定でき ます。