3 回答

TA貢獻1836條經驗 獲得超3個贊
這是一個約定,因此* nix shell知道要運行哪種解釋器。
例如,ATT的較舊版本默認為sh(Bourne shell),而BSD的較舊版本默認為csh(C shell)。
即使在今天(大多數系統都運行bash,即“ Bourne Again Shell”),腳本仍可以使用bash,python,perl,ruby,PHP等。例如,您可能會看到#!/bin/perl或#!/bin/perl5。
PS:感嘆號(!)親切地稱為“ bang”。shell注釋符號(#)有時稱為“ hash”。
PPS:請記住-在* nix下,將后綴與文件類型相關聯只是一種約定,而不是“規則”。一個可執行文件可以是一個二進制程序,一百萬腳本類型和其他的東西,以及任何一個。因此需要#!/bin/bash。

TA貢獻1865條經驗 獲得超7個贊
更準確地說,shebang #!是可執行文件(x 模式文件)的前兩個字節,由execve(2)系統調用(執行程序)解釋。但是POSIX規范execve沒有提及shebang。
它必須后跟解釋器可執行文件的文件路徑(BTW甚至可以是相對的,但大多數情況下是絕對的)。
在用戶中找到解釋器(例如)的一個不錯的技巧(也許不是那么好)是使用程序(始終在所有Linux上),例如python$PATHenv/usr/bin/env
#!/usr/bin/env python
任何ELF可執行文件都可以是解釋器。您甚至可以使用,#!/bin/cat或者#!/bin/true如果您愿意?。ǖ@通常是無用的)

TA貢獻1784條經驗 獲得超8個贊
叫做舍邦。在unix-speak中,#稱為Sharp(如音樂中的)或hash(如twitter上的標簽),而!叫做爆炸。(您實際上可以使用!!來引用以前的shell命令,稱為bang-bang)。因此,當放在一起時,您會得到haSH-BANG或shebang。
#之后的部分!告訴Unix使用什么程序來運行它。如果未指定,它將嘗試使用bash(或sh,zsh或任何$ SHELL變量),但如果存在,它將使用該程序。另外,#是大多數語言的注釋,因此該行在后續執行中將被忽略。
- 3 回答
- 0 關注
- 1335 瀏覽
添加回答
舉報