Bash
我可以在服務/守護程序腳本中使用 Bash 解釋器嗎?
我正在編寫一個應該從執行級別 2-5 開始的 Debian/Ubuntu 服務。
我遇到的大多數現有服務都是使用
/bin/sh
(Shell)解釋器編寫的,而/bin/bash
(Bash)提供了很多改進和簡化。那麼當目標僅限於 debian 6+和ubuntu 12.04時,是否有充分的理由避免使用 bash?
更新:
我通常將以下 shebang 添加到我的腳本中:
#!/usr/bin/env bash
如果您專門針對始終附帶的系統
bash
(主要是典型的 Linux 發行版(?)),我認為使用它並沒有什麼壞處,如果它允許更多可維護的腳本或其他一些顯著優勢(當然前提是 shebang 正確反映bash
依賴性)。
dash
目標是成為一個精簡的 POSIX 兼容外殼。Debian 和 Ubuntu 改用它是為了在他們的大部分啟動腳本中獲得更輕的 shell(導致更快的啟動時間等),並確保他們所有聲稱可以執行的腳本/bin/sh
實際上不會被意外的 bashism 所困擾.另一方面,如果可移植性很重要,我認為您的預設
/bin/sh
(dash
) 似乎是一個更好的起點,因為僅使用 POSIX shell 功能的腳本可能會在大多數係統上執行,而不僅僅是bash
現有系統。但是,在處理可移植性時,除了外殼之外,當然還有許多其他因素需要考慮。