微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

父shell 和 子shell; shell脚本的几种执行方式

Linux执行 脚本 有两种方式,每种方式又有具体不同的执行方法, 主要区别在于是否建立 “子shell 也叫 subshell”。

方式1: source  filename  或者  . filename (点 空格 filename)

  不创建 子shell,在当前 bash 环境下读取filename中的命令,并执行。

        关于 source  . 方法: 如果filename不在当前路径下,或者filename不在执行程序认的搜索路径下(也就是PATH环境变量), bash可能会提示找不到 filename。

 

方式2: bash filename  或者 sh filename  或者 ./filename (点 斜杠 filename)  或者  /path1/path2/filename (斜杠 加上 绝对路径)

  创建 子shell, 在当前 bash 环境下 创建一个新的 子shell 来读取filename中的命令,并执行。filename脚本执行完后,子shell 环境随即关闭,然后又回到 父shell 中。

  关于 bash  sh   ./ 方法: 如果filename不在当前路径下,或者filename不在执行程序认的搜索路径下(也就是PATH环境变量), bash可能会提示找不到 filename。

  关于 bash 和 sh 方法:filename可以不必事先设定可执行权限。 因为是将filename作为参数传递给bash或者sh,是被调用执行。

  关于 ./ 方法: filename必须具备可执行权限,它才可以自己执行。

  额外:子shell 继承 父shell 的变量, 子shell 通过 export 来使用 父shell 的变量。 (跟编程中的作用于有点儿相似)

  

子shell 从 父shell 继承如下内容

  当前工作目录;

  环境变量;

  标准输入、标准输出、标准错误输出

  所有已打开的文件标识符;

  忽略的信号;

 

子shell 不能从 父shell 继承的内容如下:

  除环境变量和 .bashrc文件定义的变量之外的shell变量;

  未被忽略的信号;

 

下面编写一个脚本(a1.sh) 来玩一下这几种情况:

 

 

 

 

 更多的有关 子shell 继承 父shell 内容,在 子shell 中使用 从 父shell 里继承的内容。 以后有使用案例了,在贴上具体的操作过程。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐