[英]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属于同一类别
如果你保持可移植性(至少对POSIX shell),你将为自己节省大量未来的工作。 你会发现自己身处另一家公司,拥有不同的操作系统和不同的外壳。 那么你对shell可移植性的了解将会带来很大的好处。
告诉自己和他人的口头禅是:“假设是所有搞砸的母亲。” :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.