当前位置: 首页 > 工具软件 > c.sh > 使用案例 >

shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别; #!含义及发展介绍

司空俊悟
2023-12-01

shell 脚本各种执行方式(source ./.sh, . ./.sh, ./*.sh)的区别

一:** ./*.sh的执行方式等价于sh ./*.sh或者bash ./*.sh,此三种执行脚本的方式都是重新启动一个子shell,在子shell中执行此脚本,脚本中设置的变量在脚本执行完毕后不会保存。
但是若 script.sh 脚本不是以 #!/bin/bash 开头,那么也不会在子进程中执行。

二:source ./*.sh. ./*.sh的执行方式是等价的,即两种执行方式都是在当前shell进程中执行此脚本,而不是重新启动一个shell 在子shell进程中执行此脚本,并且脚本中设置的变量在脚本执行完毕后会保存下来。

三:source是Shell(准确地说是Bash)的内置命令,在Bourne Shell中的等价命令是一个点.,即点命令。
用source命令执行脚本文件时,是在当前Shell进程中执行,而不是像./sh方式一样在新的Shell进程中执行,因此早先设置的变量在脚本里是可以读取到的。

四:source一般不用来执行业务脚本,最常见用途是在某些初始化脚本修改之后使其立即生效,即source /etc/profile这样

#!/bin/sh shebang对脚本执行的影响

shebang是指脚本文件中以字符#!开头的第一行,它用来指定这个脚本该用哪种解释器来解释。上文中出现的#!/bin/sh就表示应该使用sh(在这里就是Bash)来解释它。

需要注意,只有./方式执行脚本才会读取shebang并调用指定的解释器,而“sh方式”(sh当然可以换成任意其他的解释器)会忽略shebang。

Shebang通常出现在类Unix系统的脚本中第一行,作为前两个字符。在Shebang之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器。

#!/usr/bin/env脚本解释器名称
#!/usr/bin/env perl -w报错。perl -w 被当成了整体传递给env

bash和Bourne_shell的区别

Linux 中的 shell 有很多类型,其中最常用的几种是: Bourne shell (sh)C shell (csh)Korn shell (ksh), 各有优缺点。Bourne shellUNIX 最初使用的 shell GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接.

unbuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell
鉴于bash 过于复杂,有人把 ashNetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它。 但是后来经过 shell 脚本测试存在运行问题。因为原先在 bash shell 下可以运行的 shell script (shell 脚本),在 /bin/sh下还是会出现一些意想不到的问题,不是100%的兼用。

发展顺序:
Bourne shell=> bash =>dash => bash

 类似资料: