Unix shell 腳本的文件副檔名
在維基百科上,.sh的文章說:
有關 .sh 文件副檔名類型,請參閱Bourne shell。
其他 unix shell 怎麼樣?
我知道在文件中 使用shebang來指示執行的解釋器,但我想知道:
- 文件副檔名與沒有文件副檔名的優缺點是什麼?
我只會稱其為可移植的(並且希望
.sh
是可移植的)。否則,我認為隱藏語言會更好。細心的讀者無論如何都會在 shebang 行中找到它。(在實踐中,
.bash
或.zsh
等…後綴很少使用。)
我會說不存在文件副檔名的“良好實踐”,嚴格來說是技術性的:Unix/Linux/*BSD 文件系統本身不支持副檔名。您所說的副檔名僅僅是單個文件名的後綴。這與 VM/CMS、VMS、MS-DOS 和 Windows 文件系統和作業系統不同,其中 inode-moral-equivalent 中的一個特殊位置是為擴展保留的。
剛才的小吐槽結束了,我認為在 shell 腳本文件名上加上“.sh”或“.ksh”或“.bash”後綴有點愚蠢。程序就是程序:區分執行的內容沒有任何好處。沒有 unix 或 linux 或任何核心決定僅僅因為文件名後綴而對某個文件呼叫解釋器。這一切都是由
#!
文件開頭的行或其他一些“幻數”字節序列完成的。事實上,根據文件名“副檔名”決定執行什麼是使 Windows 成為惡意軟體磁鐵的因素之一。查看有多少 Windows 惡意軟體詐騙涉及名為“something.jpg.exe”的文件 - 預設情況下,較新的 Windows 不顯示“.exe”副檔名,並鼓勵使用者只需點兩下“無論如何,您可能認為的直接命令通常是一個 shell 腳本。有時
cc
一直是一個sh-script,firefox
是一個sh-script,startx
是一個sh-script。我不認為用“.sh”後綴標記腳本對認知或組織有好處。