每次寫指令碼的時候都很困惑到底第一行怎麼寫,索性一次查清楚。十分感謝原作者。
引用連結:
前言
寫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
。
dash
和bash
並不是完全相容的
所以bash
下面寫的指令碼很可能不能在dash
下執行。建議使用#! /bin/bash
或者#! /usr/bin/env bash
來明確制定使用的是bash還是dash。
python3
的註釋區別
python3的註釋也是為了制定解析器,但是由於每個系統的python3安裝路徑可能不同,所以用#! /usr/bin/env python3
可以根據系統變數來查詢到python3的安裝位置。