- shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别
- #!/bin/sh shebang对脚本执行的影响
- bash和Bourne_shell的区别
一:** ./*.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进程中执行,因此早先设置的变量在脚本里是可以读取到的。
#!/bin/sh shebang对脚本执行的影响四:source一般不用来执行业务脚本,最常见用途是在某些初始化脚本修改之后使其立即生效,即source /etc/profile这样
shebang是指脚本文件中以字符#!开头的第一行,它用来指定这个脚本该用哪种解释器来解释。上文中出现的#!/bin/sh就表示应该使用sh(在这里就是Bash)来解释它。
需要注意,只有./方式执行脚本才会读取shebang并调用指定的解释器,而“sh方式”(sh当然可以换成任意其他的解释器)会忽略shebang。
Shebang通常出现在类Unix系统的脚本中第一行,作为前两个字符。在Shebang之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器。
bash和Bourne_shell的区别#!/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



