這些區別主要體現在執行環境、權限要求和子進程管理等方面
一.可執行權限(不一樣)
- ./:
使用./script.sh執行腳本時,腳本必須具有可執行權限。這意味著你需要先使用 chmod +x script.sh 命令來賦予腳本執行權限。chmod +x script.sh ./script.sh
- sh:
使用sh script.sh執行腳本時,不需要腳本具有可執行權限。只需確保腳本有讀取權限即可。sh script.sh
二.腳本解釋器(不一樣)
- ./:
當使用./script.sh時,腳本的第一行(如果存在)會指定解釋器。例如,若腳本以#!/bin/bash開頭,則會使用Bash解釋器來運行。如果沒有指定解釋器,系統將使用默認的Shell程序。- sh:
使用sh script.sh明確指定了要使用Bourne Shell(或其兼容實現)來執行該腳本。即使腳本中指定了其他解釋器(如Bash),也會被忽略。
三.子進程與當前Shell(不全一樣)
- ./:
當使用./script.sh執行時,Linux會在一個新的子進程中運行該腳本。這個子進程不會影響父Shell的環境變量和狀態。- sh:
使用sh script.sh時,同樣會在一個新的子進程中執行該腳本。這個子進程繼承父Shell的環境變量,但普通變量(未導出)不會被繼承。
四.環境變量的影響(一樣)
如果在腳本中設置了環境變量,這些變量在腳本結束后不會影響到當前Shell,因為它是在子進程中運行的。
總結(主觀)
根據個人習慣選擇
熟悉的環境用sh,./可以更多的發現暴露一些問題,適用于特殊環境
浙公網安備 33010602011771號