开发者社区> 问答> 正文

sh, bash,source,. ,在执行脚本时有什么区别?

sh, bash,source,. ,在执行脚本时有什么区别?

展开
收起
游客i2i5j3xkpqrwe 2024-01-25 23:43:33 106 0
3 条回答
写回答
取消 提交回答
  • 在Shell脚本的执行过程中,sh, bash, source (或.),它们之间的主要区别如下:

    1. sh:

      • sh script.sh 是通过系统默认的 Bourne Shell(或兼容的shell,通常是/bin/sh指向的解释器)来执行指定的脚本。如果你的系统上/bin/sh链接到的是bash,那么脚本将以POSIX兼容模式运行,这意味着不支持bash特有的扩展功能。
      • 当你想确保脚本与尽可能多的Unix-like系统兼容时,或者脚本没有依赖bash的特殊特性,会使用sh执行脚本。
    2. bash:

      • bash script.sh 则明确指定了使用Bash shell(/bin/bash)来执行脚本,这样可以利用bash的所有特性和扩展。
      • 如果脚本包含bash特有的语法或功能,应该使用bash执行,即使系统默认的/bin/sh已经是bash,因为直接使用bash可以避免POSIX兼容模式下的限制。
    3. source.:

      • source script.sh. script.sh 都是在当前正在运行的Shell环境中执行脚本中的命令,而不是启动一个新的子Shell进程。
      • 脚本中的所有变量赋值、函数定义和环境更改都会直接影响当前Shell会话。
      • 当你需要更新当前shell的环境变量、函数定义等,而不希望新建一个独立的上下文时,通常会使用source命令。比如,在bash会话中加载用户个人配置文件.bashrc.bash_profile时就会用到source.

    总结来说,shbash 主要是用于在一个新的子进程中执行脚本,而 source. 则是在当前进程中执行脚本,这是在脚本执行上下文和环境持久性方面的显著区别。

    2024-01-26 09:35:55
    赞同 1 展开评论 打赏
  • 北京阿里云ACE会长

    在执行脚本时,shbashsource. 命令有一些区别:

    1. shsh 是 Linux 和 Unix 系统中的 Shell 命令,它表示 Bourne Shell。它是 POSIX 标准中定义的 Shell,因此可以在各种操作系统中使用。sh 用于执行简单的脚本和命令行操作。在执行脚本时,它使用 sh 命令并指定脚本文件名,例如:sh script.sh
    1. bashbash 是 Bourne-again Shell 的缩写,它是 sh 的一个增强版本。bash 支持命令行编辑、变量扩展、条件语句、循环结构等高级功能。与 sh 类似,在执行脚本时,它使用 bash 命令并指定脚本文件名,例如:bash script.sh
    1. sourcesource 命令是 bashsh 中都支持的一个命令,它用于读取并执行当前目录中的脚本文件。在执行脚本时,您可以在当前目录下使用 source 命令,例如:source script.shsource 命令会将脚本文件的内容注入到当前 Shell 环境中,从而使脚本中的变量和函数可以在当前 Shell 会话中使用。
    1. .:在执行脚本时,. 命令是一个简写,它表示当前目录。您可以在当前目录下使用 . 命令来执行脚本文件,例如:./script.sh./ 表示当前目录,后面的脚本文件名表示要执行的脚本。这种表示法通常在 Linux 和 Unix 系统中使用。
    2024-01-26 08:13:16
    赞同 展开评论 打赏
  • 三者的区别如下:

    1、 ./.sh的执行方式等价于sh ./.sh或者bash ./*.sh,此三种执行脚本的方式都是重新启动一个子shell,在子shell中执行此脚本。

    2、.source ./.sh和 . ./.sh的执行方式是等价的,即两种执行方式都是在当前shell进程中执行此脚本,而不是重新启动一个shell 而在子shell进程中执行此脚本。

    验证结果:
    image.png

    ——参考链接

    2024-01-26 00:29:55
    赞同 2 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载