编写Bash脚本或Bourne脚本是否更好?我的团队写了Bourne脚本,但我不完全确定原因。
如果这是一个神圣的战争问题(即:vim与emacs),请回复:圣战。
答案 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系列,
答案 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
。