Unix like - Shebang Line

Share on:
1#!/usr/bin/python
2# 後續代碼

第一行, 稱之為 shebang line, 至於他在幹嘛? 進來看看唄

直接看範例

假設有個檔案放在 /home/tony/say_hello.py

1#!/usr/bin/python
2print 'Hello'

裡頭的第一行, 宣告了 /home/tony/say_hello.py 這個檔案的 預設執行程式

你懂 python 以及 linux 的話, 你一定看得懂下面這句

1$ ls -l
2-rw-r--r--   1 tony  staff    32  3  9 23:35 say_hello.py
3
4# 使用 python 執行 say_hello.py
5$ python say_hello.py
6Hello

除了上述的方式執行以外, 你還可以透過下列方式來執行此腳本

1$ chmod u+x say_hello.py
2$ ls -l
3-rwxr--r--   1 tony  staff    32  3  9 23:35 say_hello.py
4#  ↑ 讓此腳本, 可被擁有者執行
5
6# 使用檔案內的 shebang line(如果有定義的話), 執行此腳本
7$ ./say_hello.py
8Hello

再來看另一個範例

假設我們在 /$HOME/demo_shebang/ 裡頭建立了 python3 虛擬環境...

 1$ cd ~
 2$ mkdir demo_shebang
 3$ cd demo_shebang
 4$ python3 -m venv venv
 5$ source venv/bin/activate
 6
 7(venv)$ which python
 8/Users/tony/demo_shebang/venv/bin/python
 9
10(venv)$ vim say_hi.py
11# ----- 內容如下 -----
12#!/Users/tony/demo_shebang/venv/bin/python
13print('This is python3 in virtual environment')
14# ----- 內容如上 -----
15
16# 執行方式1 - 需要進入此虛擬環境
17(venv)$ python say_hi.py
18This is python3 in virtual environment
19
20# 執行方式2 - 使用絕對路徑方式
21$ /Users/tony/demo_shebang/venv/bin/python say_hi.py
22This is python3 in virtual environment
23
24# 執行方式3 - 使用 shebang line 定義的方式來執行
25$ chmod u+x say_hi.py
26$ ./say_hi.py
27This is python3 in virtual environment

看到這或許你有一點點感覺了

再來個 shell script 的範例

 1$ cd ~
 2$ vim demo_shell.sh
 3# ----- 內容如下 -----
 4#!/bin/bash
 5echo "$(whoami)" "$(whoami)" No 1
 6# ----- 內容如上 -----
 7
 8# 執行方式1
 9$ bash demo_shell.sh
10tony tony No 1
11
12# 執行方式2 - 使用 預設執行程式(shebang line)
13$ chmod u+x demo_shell.sh
14$ ./demo_shell.sh
15tony tony No 1

以上舉了三個範例, 應該懂了吧!!

如果哪天看到同事網路上超人家腳本, 明明你們用的是純 python3, 但他卻這樣超...

1#!/usr/bin/python
2# 其他程式...(略)...

請從他後腦勺給他巴下去

寫第一行根本是沒有必要的, 而且嚴謹來說是錯誤的寫法

所以 shebang line 好處是?

自己想想囉, 你們公司可能會寫一堆 python3, shell script, 甚至其他直譯語言的腳本

你只要定義好每個腳本自己的 shebang line

日後只要直接輸入那份腳本的路徑就可以直接執行了

後記

shebang line 要放在第一行, 如果不寫的話, 也不會有錯

不要再亂超人家 Code 而不知道在超殺毀了


comments powered by Disqus