Bash或Bourne脚本?

时间:2010-04-27 16:32:48

标签: bash scripting sh

编写Bash脚本或Bourne脚本是否更好?我的团队写了Bourne脚本,但我不完全确定原因。

如果这是一个神圣的战争问题(即:vim与emacs),请回复:圣战。

8 个答案:

答案 0 :(得分:12)

您可以更加确定Bourne shell将安装在任何给定的Unix计算机上。是的,Bash在Linux上无处不在,但整个世界都不是Linux。

答案 1 :(得分:11)

这取决于您的目标平台。

如果您只是针对主要的Linux发行版和Mac OS X,那么您可以确信这些系统可以使用bash。在其他UNIX(例如,AIX,Solaris,HP-UX)上,bash可能不一定存在,因此Bourne是更安全的选择。如果bash可用,我可以认为你没理由更喜欢Bourne。

答案 2 :(得分:10)

最重要的是要记住,不是每个操作系统都有软链接/ bin / sh到/ bin / bash,就像某些Linux发行版那样。很多脚本都是为bash编写的,但始于:

#!/bin/sh

这样他们就会破坏,例如在Ubuntu。所以,当你编写bash脚本时,总是写:

#!/bin/bash

答案 3 :(得分:4)

嗯,这是一个品味问题,但对于初学者来说,bourne shell脚本可以使用bash运行,我认为bash具有Bourne无法运行的功能。

答案 4 :(得分:1)

可移植性。我写#!/bin/sh除非事情变得非常痛苦,然后我写#!/bin/bash。世界正在迅速变化,我敢打赌,将来很容易说服系统管理员安装bash。但是我通过使用Bourne来对冲我的赌注,这很简单。

答案 5 :(得分:1)

在Mac OS X / bin / sh上不是Bourne shell。 (但你可能会在新鲜肉食中获得真正的灼热感。)

要识别传统的Bourne shell,您可以尝试使用circumflex ^(插入符号)作为|的替代(配管)。

请参阅:

传统Bourne Shell系列,

http://www.in-ulm.de/~mascheck/bourne/

答案 6 :(得分:1)

我使用Bash作为我的登录shell,但是对于脚本,我会在一周中的任何一天和周日两次选择Bourne shell。 Bash具有更好的功能,更好的用户友好性和更好的错误。

实际上,当我登录时,让我选择Bash的相同内容让我在编写脚本时避免使用它。 Bash试图为用户提供一切美观和舒适,但是以776 kB可执行文件(在我的机器上)为代价,而Bourne shell则为140 kB。为什么我的脚本会关心用户友好性?通过使用一些聪明的Bash函数我可能获得的任何收益都可以通过shell占用空间有效地抵消,这个数量是原来的五倍。

我有运行Linux,FreeBSD和OS X的计算机。虽然我很少在计算机之间移动任何东西,但是很有可能。在Bourne shell脚本中,只需键入

即可
#!/bin/sh

它只是有效。总是。 Bash在Linux上可能很常见,但它不像Bourne shell那样标准化。在FreeBSD上,默认情况下不安装Bash。它可以从Ports安装,如果系统管理员认为这是一个好主意,但即便如此,它最终还是在 / usr / local / bin / bash (不是 / bin / bash )。因此,如果您仍然决定使用Bash,那么您应该写

#!/usr/bin/env bash

使脚本可移植。 env将为您找到shell,无论您的Unix风格如何(只要它已安装)。

在一天结束时,这是你的选择。只需确保您的脚本实际上兼容到您选择的shell,而不是依赖于“sh”符号链接到“bash”或类似的东西。

答案 7 :(得分:0)

我再次去bourne shell,因为bourne shell在unix实现中可能略有不同。使用bash,您可以确保bash始终为bash