3種Linux下運行shell腳本的方法
第一種:直接輸入文件路徑
舉例:
./script.sh
/Users/yqcd/webINFO/info_star.py
/bin/ls
說明:
- 要求文件具有可執行權限
- 如果文件在當前目錄下,不能省略代表當前目錄的
./
,否則只會在PATH
中尋找命令而不會尋找當前目錄 - 也可以執行非shell腳本,例如可以直接運行Python腳本(需在文件中標記所需Python解釋器的路徑)、可以執行ELF二進制文件等
- 會作爲子進程運行
第二種:解釋器 <腳本路徑>
舉例:
sh script.sh
bash /tmp/test/script.sh
python3 /Users/yqcd/webINFO/info_star.py
說明:
- 這種方式就是將可執行文件的路徑作爲命令行參數傳給解釋器,常見Linux shell解釋器有
bash
,sh
,zsh
等等 - 不需要腳本文件具有可執行權限
- 可以使用其他解釋器執行非shell腳本
- 會作爲子進程運行
第三種:使用source命令(點命令)
舉例:
source script.sh
. ./script.sh
(注意兩個點之間有空格). script.sh
說明:
- 點
.
,是source
命令的一個別名,二者是同一個命令,注意與代表當前目錄的點所區分 - 這個命令是專門用來執行shell命令的
- 不會創建子進程運行,而是直接在當前shell中執行,相當於把shell腳本中的命令一條條手動敲進當前shell;正因如此,腳本對shell環境的改變(例如使用export修改環境變量)會保留於當前shell。如果使用
./script
,則腳本運行完畢後不會對當前shell有影響,使用sh script
對shell環境的影響僅限於子shell中,不會帶回父shell - 不需要腳本具有可執行權限
- 它不是一個可執行二進制文件,這一點和
ls
,tree
等位於某路徑下的可執行二進制文件提供的命令不同,比如ls
一般在/bin
下;而它直接由解釋器提供,至少我用過的所有解釋器(包括bash
,zsh
,sh
,csh
等)都提供這個命令