我正在尝试从 bash 迁移到 Fish,但面临许多兼容性问题和损坏的命令。
实现无缝 shell 迁移需要遵循哪些步骤框架?另外,使用bash以外的shell下载新程序时应该注意什么?
答案1
Fish shell 与 POSIX shell / Bourne shell 不兼容,并且在许多方面有所不同。 Shell脚本大多使用sh或bash,因此必须注意在脚本开始时选择正确的解释器。 unix.stackexchange.com 上的许多基于 shell 的解决方案也是如此。
建议阅读 https://fishshell.com/docs/current/fish_for_bash_users.html对于差异。
答案2
Fish 与 bash 或 POSIX shell 不兼容。
这意味着它使用的脚本语言是不同的,因此它不能直接运行 bash 或 sh 脚本。
这意味着,当有人告诉您“在 shell 中运行此命令”时,您要么需要获取与 Fish 兼容的版本,自己翻译它,要么打开 bash 会话并在那里运行它。
其中哪一个最有意义取决于上下文。它只是安装一些软件包吗?这通常很容易翻译(非常简单的东西sudo apt update && sudo apt upgrade
甚至是兼容的),但在 bash 会话中运行它也不会真的有什么坏处。
现在,说到“下载新程序”,有两种情况:
要么程序只是你的东西跑步。就像您需要“执行货物”或“运行 nvim”一样。在这种情况下,没有问题,因为程序只是由它需要的任何解释器运行,无论它是 shell 脚本、python 脚本还是编译后的 rust、go 或 c++ 程序。您运行它,操作系统会弄清楚如何运行(通过读取#!
脚本顶部的行),然后完成。
或者该程序是您需要的 shell 脚本source
。如果文档告诉您“放入source nvm
~/.bashrc”(通常也拼写为. nvm
,带有很难看到的前导点),就是这种情况。在这些情况下,您必须找到它的鱼兼容版本或替代品,或者您必须求助于允许从 bash 脚本修改鱼环境的东西,例如低音或者重播。
根据我的经验,随着项目获得鱼类支持,后者变得越来越罕见。例如,当 python 告诉您“Source venv/bin/activate 以激活环境”时,您只需 source venv/bin/activate.fish 因为 python 的 venv 模块附带了开箱即用的 Fish 支持。