[Linux]對比source命令(點命令“.”)等3種運行shell腳本的方法

3種Linux下運行shell腳本的方法

第一種:直接輸入文件路徑

舉例:

  1. ./script.sh
  2. /Users/yqcd/webINFO/info_star.py
  3. /bin/ls

說明:

  • 要求文件具有可執行權限
  • 如果文件在當前目錄下,不能省略代表當前目錄的./,否則只會在PATH中尋找命令而不會尋找當前目錄
  • 也可以執行非shell腳本,例如可以直接運行Python腳本(需在文件中標記所需Python解釋器的路徑)、可以執行ELF二進制文件等
  • 會作爲子進程運行

第二種:解釋器 <腳本路徑>

舉例:

  1. sh script.sh
  2. bash /tmp/test/script.sh
  3. python3 /Users/yqcd/webINFO/info_star.py

說明:

  • 這種方式就是將可執行文件的路徑作爲命令行參數傳給解釋器,常見Linux shell解釋器有bash, sh, zsh等等
  • 不需要腳本文件具有可執行權限
  • 可以使用其他解釋器執行非shell腳本
  • 會作爲子進程運行

第三種:使用source命令(點命令)

舉例:

  1. source script.sh
  2. . ./script.sh(注意兩個點之間有空格)
  3. . 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等)都提供這個命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章