指令碼前面的/bin/bash

Alongite發表於2018-08-20

每次寫指令碼的時候都很困惑到底第一行怎麼寫,索性一次查清楚。十分感謝原作者。
引用連結:

前言

寫shell指令碼、python指令碼的時候經常會在檔案頭新增這些東西:

#! /bin/bash
#! /bin/sh
#! /usr/bin/env python3
#! /usr/bin/python3
複製程式碼

那這幾種其他註釋有什麼區別?

#! /bin/sh#! /bin/bash的區別

#!/bin/sh 是指此指令碼使用/bin/sh來解釋執行,#! 是特殊的表示符,其後面跟的是此解釋此指令碼的shell的路徑。

可以通過cat /etc/shells檢視系統支援的shell格式

GNU/Linux作業系統中的/bin/sh本是bash (Bourne-Again Shell) 的符號連結,但鑑於bash過於複雜,有人把bash從NetBSD移植到Linux並更名為dash (Debian Almquist Shell),並建議將/bin/sh指向它,以獲得更快的指令碼執行速度。Dash Shell 比Bash Shell小的多,符合POSIX標準。

所以Debian中預設的是dash,而不是bash

dashbash並不是完全相容的

所以bash下面寫的指令碼很可能不能在dash下執行。建議使用#! /bin/bash或者#! /usr/bin/env bash來明確制定使用的是bash還是dash。

python3的註釋區別

python3的註釋也是為了制定解析器,但是由於每個系統的python3安裝路徑可能不同,所以用#! /usr/bin/env python3可以根據系統變數來查詢到python3的安裝位置。

相關文章