2015-12-10 28 views
1

在Deb包維護者腳本中,例如, postinstall,prerm等。我認爲我們經常使用/ bin/sh作爲shell腳本解釋器。但是,/ bin/sh在不同的分配或用戶首選項上可能會有所不同。例如,Ubuntu鏈接/ bin/sh到/ bin/dash或某些用途可能鏈接到/ bin/tcsh。Deb包維護者腳本使用Bash或Sh

如果用戶將shell更改爲tcsh,可能會遇到兩種類型的語法錯誤。

1)set -e#tcsh無法理解這一點。

2)>/dev/null 2> & 1#模糊重定向。

第一個想法是刪除(1),並將(2)更改爲> &/dev/null。但是,我發現在大多數維護者腳本中,提供了'set -e'行。

現在,我不知道應該

一)我只是解決所有的問題,並使用/ bin/sh的 二)改變使用/ bin/bash的 C)忽略tcsh的情況下

誰能提供一些建議?

謝謝。 傑克

+0

我認爲debian的打包策略有指導說明,指出在這些位置使用'set -e'等是否有效,以及哪些shell可能是符合系統的'/ bin/sh'。你看了? –

+0

'set -e'只是我找到的腳本中的一種常用方式或練習。我查看了關於包裝的文件,但這並不是說太多。然而,@Tonin確實提供了一個關於Debian策略的好文件,它清楚地解釋了腳本。 –

回答

4

Debian policy不強迫你使用/bin/sh作爲外殼,你可以使用任何其他一個前提是您正確的(與Shebang)命名,它是提供您嘗試安裝到系統上(這限制如果您在preinst腳本中使用它,則默認提供了shell)。

但是Debian政策告訴你,無論真的是什麼,它總是會實現SUSv3 Shell命令語言(即:一個符合POSIX的shell)和一些附加功能。這是你可以依賴的維護者腳本。

在Debian上,/bin/sh/bin/bash,直到Lenny。從Squeeze開始,現在是/bin/dash。請參閱Debian wiki for more information

在Debian或任何衍生物,如果/bin/sh實際上是鏈接到/bin/tcsh這將是由本地管理員改變了當地的環境。這可能不僅會破壞你的腳本,還會破壞很多其他腳本。 Debian政策文件實際上告訴維護人員避免使用cshtcsh作爲腳本語言。

總之,我認爲你不應該打擾你的腳本與tcsh兼容,最好的做法是隻使用/bin/sh滿足你的所有包裝需求。

如有疑問,請務必參考完整的Debian policy document

+0

感謝這篇文檔!作爲公會線非常有用。 –