栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别; #!含义及发展介绍
  • shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别
  • #!/bin/sh shebang对脚本执行的影响
  • bash和Bourne_shell的区别

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 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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号