我有一個跨平臺的產品,已經部署到幾個Linux發行版,並且我正忙於更改它的一個啓動腳本。目前該腳本使用/ bin/sh作爲解釋器。我的問題是。如果我將其更改爲/ bin/bash,那麼會有多大安全?是否會有某些情況下未安裝bash?爲什麼/etc/init.d中的所有腳本都使用/ bin/sh。有什麼東西在使用bash時會破壞?我可以假設安裝了bash
回答
我可以假設bash的安裝
如果便攜性是一個目標,你會做你自己幫倒忙假設已安裝bash
。這並不是說bash
將不會被安裝99%的時間,但它是1%得到你。
如何安全是我,如果我更改爲/ bin/bash中,會不會有一些情況下是沒有安裝bash或東西
bash
是POSIX Compliant外殼,所以,除非你需要/想要使用僅限bash的語法,我不會簡單地將解釋器行改爲#!/bin/bash
;它給你買什麼有與#!/bin/sh
工作的腳本爲什麼在 /etc/init.d中使用/ bin/sh的所有腳本
因爲他們不希望系統往下走,如果管理員決定,他希望通過刪除bash
,因爲他最喜歡的外殼是zsh
要節省硬盤空間,有一些東西,使用bash時將打破 ?
這是另一種方式。如果你使用bash只(非POSIX)語法的腳本,例如[[ ]]
或進程替換<()
,如果你改變從#!/bin/bash
解釋到#!/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的 0123如果你保持便攜性(至少對POSIX殼)記住個
- 所有的編譯器GCC是
,你將自己節省了很多工作的未來。有一天你會發現自己身處另一家公司,擁有不同的操作系統和不同的外殼。那麼你對殼牌可移植性的瞭解將會帶來巨大的收益。
告訴自己和他人的口頭禪是這樣的:「假設是所有搞砸的母親。」 :-)
- 1. Ansible安裝了Git嗎?我可以安全地刪除它嗎?
- 2. 我可以檢查我安裝了哪個版本的OpenMP嗎?
- 3. 檢查Java是否安裝了Bash
- 4. 如果啓用了libcurl,我可以假設所有setopt選項都可用?
- 5. 我們假設,我們都給予了以下功能
- 6. 如何我可以檢查是否安裝了應用程序
- 7. 我們可以檢測是否安裝了根CA證書?
- 8. 我可以弄清誰安裝了Slack App?
- 9. 如果我知道.NET 4.0安裝在用戶的機器上,我是否可以假設.NET 2.0呢?
- 10. 可以假定哪些依賴關係可以安裝在構建機器上?
- 11. apk可以通過corona安裝,不能安裝在設備中
- 12. 我們可以在安裝了另一個tableau Server的同一臺機器上安裝Tableau worker安裝嗎?
- 13. 可以安裝Grandnode
- 14. Rails CanCan:Can Can可以假設我可以:如果可以,請閱讀:更新?
- 15. 我安裝pqxx錯了嗎?
- 16. 我可以假設大多數Android設備都有WiFi嗎?
- 17. 我可以安裝eclipse和android studio嗎?
- 18. 我可以爲Python安裝opencv2嗎?
- 19. 我可以在xcode上安裝gtk嗎?
- 20. 我可以在heroku中安裝cruisecontrol.rb嗎?
- 21. 我可以在哪裏「安裝」?
- 22. 我可以在Canopy上安裝Anaconda嗎?
- 23. 我可以在全球安裝Gulp嗎?
- 24. 我可以在ubuntu上安裝xcode嗎?
- 25. 我們可以在安裝vs2005之前安裝sqlserver2005嗎?
- 26. 如果我已安裝.NET 4.0,可以安裝.NET 3.5嗎?
- 27. 我可以安裝pg_dump而無需在Alpine上安裝postgres?
- 28. 我可以爲我的js文件假設gzip壓縮嗎?
- 29. Java WebStart:如何解決deployJava.js忽略Chrome 42並假設安裝了java
- 30. 如果我安裝了Rails的jRuby,我可以只使用Ruby嗎?
是的,在* BSD上通常是`/ usr/bin/bash`(如果安裝的話),它往往更喜歡ksh。 – ephemient 2011-01-27 15:25:25
如果在沒有附加選項的情況下安裝了軟件包或端口,至少在FreeBSD上是`/ usr/local/bin/bash`。 – Jens 2011-08-30 09:04:37