Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我可以假定安装了bash吗_Linux_Bash_Debian - Fatal编程技术网

Linux 我可以假定安装了bash吗

Linux 我可以假定安装了bash吗,linux,bash,debian,Linux,Bash,Debian,我有一个跨平台的产品,它被部署到几个Linux发行版上,我正忙于更改它的一个启动脚本。当前脚本使用/bin/sh作为解释器。我的问题是。如果我将其更改为/bin/bash,我的安全性有多高,是否会出现一些未安装bash或其他情况。为什么/etc/init.d中的所有脚本都使用/bin/sh。在使用bash时是否有一些东西会损坏?这取决于应用程序的“跨平台”程度 如果它运行在“主要”linux发行版上,可以随意使用bash,但如果是较小的dist或定制安装,则bash不是给定的。事实上,如果您离开

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

这取决于应用程序的“跨平台”程度

如果它运行在“主要”linux发行版上,可以随意使用bash,但如果是较小的dist或定制安装,则bash不是给定的。事实上,如果您离开linux,我会更加小心地假设bash(对于这个问题,/bin/bash位置也不是给定的)

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

我认为如果使用bash,东西不会坏,bash实现了与sh相同的“特性”,但不是相反。因此,简而言之,如果您不需要bash特定的特性,那么使用/bin/sh

我可以假定安装了bash吗

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

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

bash
是一个shell,因此除非您需要/想要使用仅bash语法,否则我不会将解释器行更改为
#/一时兴起的bin/bash
;如果脚本与
#一起工作,它就不会为您带来任何好处/bin/sh

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

因为如果管理员决定删除
bash
以节省硬盘空间,他们不希望系统崩溃,因为他最喜欢的shell是
zsh

有什么东西会坏吗 当使用bash时


这更像是另一种方式。如果您有一个仅使用bash(非POSIX)语法的脚本,例如
[[]]
或进程替换
,则假定安装了bash与

  • 全世界都是吸血鬼
  • 所有的CPU都是i386
  • 所有免费的Unixen都是Linux
  • 所有的IDE都是Eclipse
  • 所有的编译器都是gcc
如果您牢记可移植性(至少是POSIX外壳的可移植性),您将为将来节省大量工作。总有一天,你会发现自己身处一家不同的公司,拥有不同的操作系统和不同的外壳。那么,您对shell可移植性的了解将带来巨大的回报


告诉自己和其他人的咒语是:“假设是所有错误之母。”:-)

此外,启动脚本使用
sh
,因为它比Bash快。在/bin/sh链接到/bin/Bash的系统上,即使使用/bin/sh以sh“兼容”模式运行Bash,它也不是完全兼容的。仍然可以使用特定于bash的语法,并使其与/bin/sh链接到bash,但在使用更严格兼容的shell(如dash)时不起作用。@Arrowmaster能否提供bash作为
/bin/sh
运行时将执行的非POSIX语法的具体示例。作为
#调用shell/bin/sh--posix
是否更改此行为?Debian和Ubuntu已经将sh从bash切换到dash,因此您可以在他们对sh脚本所做的更改中找到大量示例。因此,他们的工具中甚至有一个checkbashisms脚本来帮助查找它们。是的,*BSD上经常有
/usr/bin/bash
(如果安装了的话),在FreeBSD上,如果安装包或端口时没有附加选项,则至少是
/usr/local/bin/bash