对 Fish 重新使用 '~/.profile'?

对 Fish 重新使用 '~/.profile'?

(我说的是外壳,尤其是鱼的鱼

对于 Bash/ZSH,我有~/.profile一些导出、别名和其他东西。

我不想为 Fish 单独配置环境变量,我想重新使用我的~/.profile。怎么做?

在常见问题解答中,我至少可以通过导入这些内容/usr/local/share/fish/tools/import_bash_settings.py,但我并不喜欢为每个 Fish 实例运行该操作。

答案1

您可以使用bash来解析/etc/profile~/.profile,然后启动 fish。

  1. /usr/local/bin/fishlogin用内容创作

     #!/bin/bash -l
     exec -l fish "$@"
    
  2. 使其可执行

     sudo chmod a+rx /usr/local/bin/fishlogin
    
  3. fishlogin通过运行并检查是否进入 Fish shell 来检查它是否正常工作。按 Control+D 退出 Fish shell。

  4. 将其添加到/etc/shells

     echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
    
  5. 将其设置为你的默认 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

相关内容