Answers:
您可以使用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
用fish替换bash进程,而-l
导致fish的原因argv[0]
是-fish
,这表明这是登录shell。
我当前的解决方案(请参阅此处,以获得更新的版本):
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
您可以使用bass(一个插件)在fish中执行bash命令。
安装低音。
$ git clone https://github.com/edc/bass.git
$ cd bass
$ make install
然后,将其放入您的config.fish
:
bass source ~/.profile
.profile
问题太多了。
bass
另一方面解释任何bash shell脚本,并使它们在鱼中运行。当然会有更多的开销,但根据我的经验可以忽略不计,但是您的里程可能会有所不同。
我尝试将.profile采购到鱼类创业公司,它对我来说就像一个魅力。
做就是了 :
echo 'source ~/.profile;clear;' > ~/.config/fish/config.fish
重新启动终端或iterm2,从中测试别名.profile
。
注意:无法使用使用fish-credit @erb中不可用的语法的更复杂的.profile文件
.profile
使用使用fish中不可用的语法的更复杂的文件。
安装dash
此行并将其添加到您的config.fish
:
env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source
dash
-只需安装sh
(可能有点破了)
如果您的发行版使用PAM,则可以在~/.pam_environment
文件中设置环境变量 。