回答:
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 "$@"
。exec
bashプロセスを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ファイルでは機能しません
.profile
fishでは使用できない構文を使用するより複雑なファイルでは機能しません。
できません。fish
の構文は、Bourneシェル(/bin/sh
)構文とは異なります。これは、あなたが使用することはできません同じ理由である.profile
ような他の非ボーン由来シェル、とcsh
とtcsh
。
ディストリビューションがPAMを使用している場合、~/.pam_environment
ファイルに環境変数を設定でき ます。