linux bin sh bin bash,脚本:#!/bin/sh 和 #!/bin/bash 之间的区别?

问题

如果我写,#!/bin/bash

echo"foo"

或者#!/bin/sh

echo"foo"

两者都产生相同的结果,我看到有一些以#!/bin/sh或#!/bin/bash开头的脚本,他们之间有什么区别?

答案1

bash和sh是两个不同的shell,基本上bash就是sh,但具有更多的特性和更好的语法,

在大多数系统上/bin/sh是一个符号链接,并且不会调用sh,在Ubuntu /bin/sh中,链接到bash,Linux发行版上的典型行为,现在已经更改为链接到bash是最常用的shell,是Linux系统用户的默认shell,它是Unix历史中使用的其他shell的继承者,它的名字bash是Bourne-Again Shell的缩写,是对它旨在替代的Bourne Shell的致敬,尽管它还结合了CShell和Korn Shell的功能。

从/bin/bash ~bash的系统到这里都可以访问它。

问题是,不同的shell之间存在微小的不一致,当运行脚本时,这可能是一个真正的问题,bash拥有很多脚本特性,这些特性对于bash来说是独一无二的,对其他shell来说则不然。

脚本可以在第一行指定#!/bin/bash,这意味着脚本应该始终使用bash运行,而不是使用另一个shell。

/bin/sh是表示系统shell的可执行文件,在Linux发行版中,长期以来,这通常是bash的符号链接,以至于总是将/bin/sh链接到bash或与bash兼容的shell成为一种惯例。

编写脚本时应该使用什么

如果脚本只需要bash支持的特性,请使用#!/bin/bash。

但是,如果可能,最好确保你的脚本是POSIX兼容,并且使用#!/bin/sh,它应该始终非常可靠地指向任何安装中首选的POSIX兼容系统shell。

答案3

即使/bin/sh是指向/bin/bash的符号链接,#!/bin/sh也不完全等效于#!/bin/bash。

如果用sh调用bash,它试图尽可能地模仿历史版本的sh的启动行为,同时符合POSIX标准。"

例如,特定于bash的语法:exec > >(tee logfile.txt)

在以shell开头的#!/bin/sh中会给出错误,即使使用sh-> bash符号链接也一样。

相关文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值