阚金翔
达则兼济天下,穷则独善其身

这些区别主要体现在执行环境、权限要求和子进程管理等方面

一.可执行权限(不一样)

  • ./:
    使用 ./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./可以更多的发现暴露一些问题,适用于特殊环境

posted on 2024-12-19 11:35  阚金翔  阅读(35)  评论(0编辑  收藏  举报