我可以假设安装了bash

时间:2011-01-27 08:08:30

标签: linux bash debian

我有一个跨平台产品,可以部署到几个Linux发行版,我正在忙着更改其中一个启动脚本。目前该脚本使用/ bin / sh作为解释器。我的问题是。如果我将其更改为/ bin / bash,我会有多安全,是否会出现某些未安装bash或其他情况的情况。为什么/etc/init.d中的所有脚本都使用/ bin / sh。使用bash时会有一些东西会破坏吗?

3 个答案:

答案 0 :(得分:12)

  

我可以假设已安装bash

如果可移植性是一个目标,那么假设bash已安装,您将自行承担责任。这并不是说99%的时间不会安装bash,而是获得ya的1%。

  

如果我将其更改为/ bin / bash,我有多安全,是否会出现某些未安装bash的情况

bash是一个POSIX Compliant shell,所以除非您需要/想要使用仅使用bash的语法,否则我不会随意将解释器行更改为#!/bin/bash;它使用与#!/bin/sh

一起使用的脚本为您购买任何东西
  

为什么所有的脚本都在   /etc/init.d使用/ bin / sh

因为如果管理员决定删除bash,因为他最喜欢的shell是zsh

,他们不希望系统停止运行
  

是否有一些东西会破裂   什么时候使用bash?

反过来说。如果你的脚本只有bash-only(非POSIX)语法,例如[[ ]]或进程替换<( ),那么如果你将解释器从#!/bin/bash更改为{{1},这将会中断}}

答案 1 :(得分:2)

这取决于您申请的“交叉”平台。

如果它运行在“主要”Linux发行版上,请随意假设bash,但如果是较小的dists,或自定义安装bash不是给定的。事实上,如果你离开linux,我会更加谨慎地假设bash(并且就此而言,/ bin / bash位置也不是给定的。)

/etc/init.d脚本总是使用/ bin / sh的原因是因为它在大多数平台上都是给定的。

我不认为如果你使用bash会破坏东西,bash实现与sh相同的“功能”,但不是相反。因此,如果您不需要bash特定功能,请使用/ bin / sh

答案 2 :(得分:0)

假设安装的bash与

属于同一类别
  • 全世界都是VAX
  • 所有CPU均为i386
  • 所有免费的Unixen都是Linux
  • 所有IDE都是Eclipse
  • 所有编译器都是gcc

如果你保持可移植性(至少对POSIX shell),你为将来节省很多工作。你会发现自己身处另一家公司,拥有不同的操作系统和不同的外壳。那么你对shell可移植性的了解将会带来很大的好处。

告诉自己和他人的口头禅是:“假设是所有搞砸的母亲。” : - )