10

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

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

4

8 回答 8

12

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

于 2010-04-27T16:33:55.030 回答
12

这取决于您的目标平台是什么。

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

于 2010-04-27T16:38:16.283 回答
10

最重要的是要记住,并非每个操作系统都像某些 Linux 发行版那样将 /bin/sh 软链接到 /bin/bash。许多脚本是为 bash 编写的,但开头是:

#!/bin/sh

以便它们在 Ubuntu 中中断。因此,当您编写 bash 脚本时,请始终编写:

#!/bin/bash
于 2010-04-27T16:47:26.537 回答
4

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

于 2010-04-27T16:36:02.087 回答
2

我使用 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无论您的 Unix 风格如何(只要它已安装),都会为您找到 shell。

归根结底,这是您的选择。只需确保您的脚本实际上符合您选择的外壳程序,而不是依赖“sh”符号链接到“bash”或类似的东西。

于 2012-02-25T21:55:15.417 回答
1

可移植性。除非事情变得非常痛苦,否则我会写作#!/bin/sh,然后我会写作#!/bin/bash。世界瞬息万变,我敢打赌,将来说服系统管理员安装 bash 会很容易。但是我在大多数事情上都使用 Bourne 来对冲我的赌注,这很简单。

于 2010-04-28T04:36:49.093 回答
1

在 Mac OS X 上 /bin/sh 不是 Bourne shell。(但你可能会在新鲜肉上得到一个真正的 bournesh)。

要识别传统的 Bourne shell,您可以尝试使用抑扬符 ^(插入符号)来代替 | (管道)。

看:

传统的伯恩贝壳家族,

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

于 2010-04-30T07:12:32.587 回答
0

我会再次选择 bourne shell,因为 bourne shell 在 unix 实现中可能略有不同。有bash你可以肯定的bash是永远bash

于 2010-04-27T17:03:11.753 回答