我的公司开始增加对 Linux 的支持,并且我们的一些 shell 脚本开始变得更加复杂。今天我们使用shebang作为
#! /bin/sh
但是我们遇到了一些发行版(例如 Ubuntu)的问题,例如其中 sh 指向 dash 和一些更奇特的。
我的问题是,例如将 shebang 更改为 bash 有什么风险?也许更好的问题是这些天是否可以有一个没有 bash 的发行版?
我的公司开始增加对 Linux 的支持,并且我们的一些 shell 脚本开始变得更加复杂。今天我们使用shebang作为
#! /bin/sh
但是我们遇到了一些发行版(例如 Ubuntu)的问题,例如其中 sh 指向 dash 和一些更奇特的。
我的问题是,例如将 shebang 更改为 bash 有什么风险?也许更好的问题是这些天是否可以有一个没有 bash 的发行版?
最好更改它,如果您依赖 bash 特定语法,那么您的 shell 脚本需要声明它需要 bash 而不是通用 shell。
#! /usr/bin/env bash
通常首选
#! /bin/bash
因为它允许系统以非标准方式/位置安装 bash
回答您的第二个问题:“这些天是否可以有一个没有 bash 的发行版”。嗯,当然有可能,但可能性极小。来自 bash 维护者的网站——bash 4.x 在 GNU/Linux 和 Mac OSX 上是标准的,在 Windows 上,Cygwin 和 MinGW 都附带 bash 3.x。有用于 BSD 的端口,并且 Solaris 自 8+ 以来就提供了 bash 版本,其中 10 个随 bash 4.x 一起提供。
这似乎表明你会非常不幸地找到没有 bash 的 GNU/Linux 操作系统。
我想你问错问题了。更好的问题是:“#!/bin/sh
用于使用非可移植 shell 语法(又名 bashisms)的脚本有多糟糕”。答案是:“真的很糟糕”。修复你的shebangs。如果你写#!/bin/sh
但写一个bash
脚本,你就是在自找麻烦。别再把dash
它想象成异国情调了,你会写出更可移植的代码。简而言之,修复你的shebangs一点也不坏,不这样做是非常糟糕的。
没有比将其更改为 PHP 更大的风险。或者到 Perl。或者到 Python。使用任何你喜欢的口译员。