例如這個腳本,將啓動/bin/bash,接着bash將從標準輸入讀取到接下來兩所有命令,並執行。
export LANG=en
VSEXEC=/opt/slickedit/bin/vs
unset XMODIFIERS
$VSEXEC $@
1. #!之後的內容,可以複雜點的命令行(不過似乎只能是一個參數,所有的內容都將被識別爲第一個參數,多了會被“特別”處理)。只要執行後能夠啓動命令解釋器的,都行。例如:
#!/usr/bin/env lua5.1
print 'hello from Lua'
2. #!行之後的內容,將作爲標準輸入輸入到#!所啓動的程序。這個程序可以是任意的程序,這也意味着任何語言都可以當成腳本來用。同時,這也意味着不是腳本執行完成之後,程序就一定會退出。例如下面這個用LOGO語言編寫的腳本,最後一行加了bye命令來退出ucblogo,如果沒有這個bye,那麼ucblogo將會繼續執行而不是退出。
; :s - 最底邊邊長
; :l - 角1
; :r - 角2
; :dl - 左邊的遞減倍數
; :dr - 右邊的遞減倍數
to b_tree :n :s :l :r :dl :dr
if :n=0 [stop]
fd :s lt :l
b_tree :n-1 :s*:dl :l :r :dl :dr
rt :l+:r
b_tree :n-1 :s*:dr :l :r :dl :dr
lt :r bk :s
end
ht pu bk 200 pd
pr [enter a number(n>0): ]
make "x rl
b_tree first :x 100 20 20 0.7 0.9
pr [ press any key to exit... ]
make "x rl
bye
3. 可以很簡單地製作一個header,然後附加各種數據。例如將上面的解釋器改成#!/bin/cat之後,運行結果如下:
#!/bin/cat
; :s - 最底邊邊長
; :l - 角1
; :r - 角2
; :dl - 左邊的遞減倍數
; :dr - 右邊的遞減倍數
to b_tree :n :s :l :r :dl :dr
if :n=0 [stop]
fd :s lt :l
b_tree :n-1 :s*:dl :l :r :dl :dr
rt :l+:r
b_tree :n-1 :s*:dr :l :r :dl :dr
lt :r bk :s
end
ht pu bk 200 pd
pr [enter a number(n>0): ]
make "x rl
b_tree first :x 100 20 20 0.7 0.9
pr [ press any key to exit... ]
make "x rl
bye
注意:我曾嘗試直接套用tar來製作自解壓,但由於第一行也會被輸入,所以是不可以的。但是由於#!的格式太過簡單,不支持複雜的命令行,所以,最好的方法還是自己寫一個完整的腳本來製作自解壓。這裏是一個簡單的自解壓header,用來爲.tar.bz2創建自解壓文件。使用方法如下:
chmod +x XXX.self-extractor