一:
** ./*.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
这样
shebang
是指脚本文件中以字符#!
开头的第一行,它用来指定这个脚本该用哪种解释器来解释。上文中出现的#!/bin/sh
就表示应该使用sh(在这里就是Bash
)来解释它。
需要注意,只有./
方式执行脚本才会读取shebang
并调用指定的解释器,而“sh方式”(sh当然可以换成任意其他的解释器)会忽略shebang。
Shebang通常出现在类Unix系统的脚本中第一行,作为前两个字符。在Shebang之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器。
#!/usr/bin/env
脚本解释器名称
#!/usr/bin/env perl -w
报错。perl -w 被当成了整体传递给env
Linux 中的 shell 有很多类型,其中最常用的几种是: Bourne shell (sh)
、C shell (csh)
和 Korn shell (ksh)
, 各有优缺点。Bourne shell
是 UNIX
最初使用的 shell GNU/Linux
操作系统中的 /bin/sh
本是 bash (Bourne-Again Shell)
的符号链接.
unbuntu
继承了Debian
,所以从Ubuntu 6.10
开始默认是Dash Shell
鉴于bash
过于复杂,有人把 ash
从 NetBSD
移植到 Linux
并更名为 dash (Debian Almquist Shell)
,并建议将 /bin/sh
指向它。 但是后来经过 shell 脚本测试存在运行问题。因为原先在 bash shell
下可以运行的 shell script (shell 脚本)
,在 /bin/sh
下还是会出现一些意想不到的问题,不是100%的兼用。
发展顺序:
Bourne shell
=>bash
=>dash
=>bash