答案1
您可以使用bash
来解析/etc/profile
和~/.profile
,然后启动 fish。
/usr/local/bin/fishlogin
用内容创作#!/bin/bash -l exec -l fish "$@"
使其可执行
sudo chmod a+rx /usr/local/bin/fishlogin
fishlogin
通过运行并检查是否进入 Fish shell 来检查它是否正常工作。按 Control+D 退出 Fish shell。将其添加到
/etc/shells
echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
将其设置为你的默认 shell。
在 Linux 下:
sudo usermod -s /usr/local/bin/fishlogin $USER
在 macOS 下:
chsh -s /usr/local/bin/fishlogin $USER
答案2
为了获得更清洁的解决方案,您可以使用外部环境插入:
fenv source ~/.profile
答案3
我当前的解决方案(参见这里可能为更新的版本):
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
答案4
我尝试在 fish startup 上获取 .profile,效果非常好。
做就是了 :
echo 'source ~/.profile;clear;' > ~/.config/fish/config.fish
重新启动终端或 iterm2,测试从到测试的别名.profile
。
注意:不适用于使用 fish 中没有的语法的更复杂的 .profile 文件 - 致谢@erb