问题描述
背景
切换到Fish作为主shell后,更能感受到这个词是如何充满了bash中心主义,或者至少对友好的交互shell不是很友好。
很常见的一点是找到邀请 echo 'export PATH= "/some/specific/path:$PATH"' >>~/.bashrc
的文档。或者它最多建议一些更通用的配置文件,如 profile
、inputrc
等。虽然它很容易转置,但它仍然提出了一个问题:作为替代良好实践提出的更好的更便携的替代方案是什么?也就是说,是否有可能提出一个补丁,将这种面向 Bash/POSIX 的文档变成一个功能齐全的替代多语言 shell 脚本,该脚本也适用于 Fish,甚至可能适用于其他 shell?
挑战
这里列出了一些要点,当人们专注于 Unix shell(即没有 DOS,没有 Powershell),甚至只考虑 Bash 和 Fish 时,很难找到多语言替代方案
- 作业:Bash(实际上是 Korn shell 家族)使用
ilk=nub
,其中 Fish 使用set ilk nub
(参见 NotTheDr01ds’ answer for more idiomatic way to deal with that) - 配置文件:Bash主用户配置文件为
~/.bashrc
,而Fish源为~/.config/fish/config.fish
。
相关资源
- https://superuser.com/questions/446925/re-use-profile-for-fish
- https://github.com/oh-my-fish/plugin-foreign-env
- https://hyperpolyglot.org/unix-shells
解决方法
我个人的偏好是只接受“fish
”方式。
例如,您提到了通过更新 .bashrc
添加到 PATH 的文档。 “fish
方式”将是 set -Ua fish_user_paths my_new_path
(或使用最近添加的 fish_add_path
命令)一次。
您(可以)在 fish
中有一个已知的位置,而不是必须通过数十或数百行配置文件和 rc 文件来检查和更改您的 PATH 添加项 (set --show fish_user_paths
).
这还具有将更改传播到所有正在运行的 fish
shell 实例的优点,而不必像在 {{ 1}}。当您在长时间运行的系统上打开多个终端窗口时,这非常有用。
当然,如果你需要 bash
来做某事,那么你总是可以从 bash
中放入一个 bash
子 shell,然后你的简单添加和编辑fish
中的 PATH 当然在子 shell 中可用。在这种情况下,无需担心在 fish
中交叉维护一堆 PATH 修改。