shell 迁移的框架是什么?

shell 迁移的框架是什么?

我正在尝试从 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 支持。

相关内容