我在这里简化我的场景。
我构建了一系列 bash 脚本并在 Ubuntu 下测试了它们。
我想确保我的脚本(bash 语法)在 CentOs 下同样工作。
有没有关于如何编写与 CentOS 和 Ubuntu 兼容的 bash 脚本的指南?
或者甚至更好:是否有任何指南解释如何创建跨 Linux 平台的 bash 脚本?
更新和澄清
关于@CM 评论,我不是在问 bash 是如何工作的。我想问 Linux 发行版之间的 bash 解释器代码库是否不同?
例如,大多数 Python 3 的代码库在许多平台上都是相同的,并且行为也相同。根据我的经验,Python 代码非常实用。这同样适用于许多其他解释器的 Node.js 代码。
然而,我不确定 Bash 是否受益于同样的可移植性。我可能是错的,但对我来说,Bash 似乎是在 Linux 发行版内部集成的。我对么?大多数 Linux 发行版是否使用相同的源代码存储库来编译和分发 Bash?
答案1
问题的基本前提已经改变(来自“bash
在一个发行版上编写的脚本是否可以在另一个发行版上运行”),但答案的主旨保持不变;原来的答案基本上保留在这个答案的结论中。
我想问 Linux 发行版之间的 bash 解释器代码库是否不同?
不,它是相同的,尽管eg 的.bashrc
处理方式有一些细微的变化。来源bash
是GPL。如果 Linux 发行商正在分发 的修改版本bash
,则修改后的源代码也应该可供检查并与一般版本进行比较。
我想确保我的脚本(bash 语法)在 CentOS 下同样工作
这shell命令的语法考虑bash
到相同版本的bash
.
例如,大多数 Python 3 的代码库在许多平台上都是相同的,并且行为也相同。
这是一个很好的比喻。就像相同的 Python 代码可以在相同(或相似)版本的 Python 以及已安装的库和实用程序的情况下工作一样,同样如此bash
。
我可能是错的,但对我来说,Bash 似乎是在 Linux 发行版内部集成的。我对么?
你确实错了,因为你暗示你怀疑。 bash
并不比其他工具(例如ls
或jq
或 )更“内部集成” rsync
,除了bash
可能默认安装而egjq
可能不会安装之外。
有没有关于如何编写与 CentOS 和 Ubuntu 兼容的 bash 脚本的指南?
啊,这似乎是你多方面问题的主要内容。
可能有很多指南,但关于您正在编写哪种类型的脚本,没有足够的细节来为这个特定问题提供真正有意义的答案。 bash
不过,脚本本身并不是决定脚本如何在一个发行版中工作但在另一个发行版中可能不起作用的主要因素。
bash
只要bash
安装了脚本,脚本本身就可以在您将其移动到的任何发行版上完美运行。为了获得最佳兼容性,请确保在每个主机上安装相同(或相近)版本的bash
(例如,如果脚本利用了第四个版本中引入的功能,则根据bash
v3 和v4 之间的脚本,您可能会看到一些小的兼容性问题bash
的bash
)。
然而,外在实用程序可能不存在或工作方式可能不同。
例如,如果您有一个脚本为 Ubuntu/Debian 编写旨在处理包管理,它将被编写为期望和使用.deb
包管理器,例如apt
.这些工具不太可能在 Red Hat 派生系统上出现和/或起作用,该系统使用.rpm
包管理器,例如yum
.这并不是 的缺陷bash
,而是它运行环境的后果。