这些区别主要体现在执行环境、权限要求和子进程管理等方面
一.可执行权限(不一样)
- ./:
使用./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
,./
可以更多的发现暴露一些问题,适用于特殊环境