2011-01-27 50 views
4

我有一個跨平臺的產品,已經部署到幾個Linux發行版,並且我正忙於更改它的一個啓動腳本。目前該腳本使用/ bin/sh作爲解釋器。我的問題是。如果我將其更改爲/ bin/bash,那麼會有多大安全?是否會有某些情況下未安裝bash?爲什麼/etc/init.d中的所有腳本都使用/ bin/sh。有什麼東西在使用bash時會破壞?我可以假設安裝了bash

回答

11

我可以假設bash的安裝

如果便攜性是一個目標,你會做你自己幫倒忙假設已安裝bash。這並不是說bash將不會被安裝99%的時間,但它是1%得到你。

如何安全是我,如果我更改爲/ bin/bash中,會不會有一些情況下是沒有安裝bash或東西

bashPOSIX Compliant外殼,所以,除非你需要/想要使用僅限bash的語法,我不會簡單地將解釋器行改爲#!/bin/bash;它給你買什麼有與#!/bin/sh

工作的腳本爲什麼在 /etc/init.d中使用/ bin/sh的所有腳本

因爲他們不希望系統往下走,如果管理員決定,他希望通過刪除bash,因爲他最喜歡的外殼是zsh

要節省硬盤空間,有一些東西,使用bash時將打破 ?

這是另一種方式。如果你使用bash只(非POSIX)語法的腳本,例如[[ ]]或進程替換<(),如果你改變從#!/bin/bash解釋到#!/bin/sh

2

這取決於你的應用程序是如何「交叉」的平臺。

如果它運行在「主要」linux發行版上,可以自由地假定bash,但是如果是更小的dists,或者定製安裝bash不是給定的。事實上,如果你離開linux,我會更加小心地假設bash(並且因此/ bin/bash位置也不是給定的)。

/etc/init.d腳本總是使用/ bin/sh的原因是因爲它是大多數平臺上給出的。

我不認爲東西會打破,如果你使用bash,bash實現與sh相同的「功能」,但不是相反的方式。因此,在短期,如果你不需要bash的特定功能,然後使用/ bin/sh的

+0

是的,在* BSD上通常是`/ usr/bin/bash`(如果安裝的話),它往往更喜歡ksh。 – ephemient 2011-01-27 15:25:25

+0

如果在沒有附加選項的情況下安裝了軟件包或端口,至少在FreeBSD上是`/ usr/local/bin/bash`。 – Jens 2011-08-30 09:04:37

0

假設bash的安裝跌倒在同一個,這將打破作爲類

  • 整個世界是一個VAX
  • 所有的CPU是i386的
  • 所有免費Unixen是Linux的
  • 所有的IDE都Eclipse的
  • 0123如果你保持便攜性(至少對POSIX殼)記住個
  • 所有的編譯器GCC是

,你自己節省了很多工作的未來。有一天你會發現自己身處另一家公司,擁有不同的操作系統和不同的外殼。那麼你對殼牌可移植性的瞭解將會帶來巨大的收益。

告訴自己和他人的口頭禪是這樣的:「假設是所有搞砸的母親。」 :-)

相關問題