繁体   English   中英

我可以假设安装了bash

[英]Can I assume bash is installed

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

我可以假设安装了bash

如果可移植性是一个目标,那么假设安装了bash ,你自己就会受到伤害。 这并不是说99%的时间不会安装bash ,而是获得ya的1%。

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

bash是一个POSIX兼容的 shell,所以除非你需要/想要使用bash-only语法,否则我不会只是随心所欲地将解释器行更改为#!/bin/bash ; 它使用与#!/bin/sh一起使用的脚本购买任何东西

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

因为如果管理员决定通过删除bash来保存硬盘空间,因为他们最喜欢的shell是zsh他们不希望系统关闭

使用bash时会有一些东西会破坏吗?

反过来也是如此。 如果你有一个只有bash-only(非POSIX)语法的脚本,例如[[ ]]或进程替换<( ) ,如果你将解释器从#!/bin/bash改为#!/bin/sh ,这将会中断#!/bin/sh

这取决于您应用程序的“交叉”平台。

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

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

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

假设安装的bash属于同一类别

  • 全世界都是VAX
  • 所有的CPU都是i386
  • 所有免费的Unixen都是Linux
  • 所有的IDE都是Eclipse
  • 所有的编译器都是gcc

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM