父shell和子shell的区别,在shell脚本中要cd一个文件夹为什么要用父shell运行
2013-08-17 09:59
435 查看
父Shell与子Shell
Login Shell
登录主机后,在执行Bash Script之前,其实我们已经处于一个BashShell中。
这个Shell叫login Shell,是将来我们执行任何Script的上层环境。又叫父SHell
其实每个帐号都可以自定义loginShell。以Linux来说,帐号的login Shell定义在/etc/passwd这个文件中。
/etc/passwd的每一行代表一个帐号,共有7个字段,之间用:隔开。
帐号:x:UID 使用者代码:GID 群组代码:用户信息:主目录:login shell路径
第二栏x为密码栏,基于系统安全考虑,编码后的密码已经被放入/etc/passwd文件中。
login Shell定义在第7个字段,如果这个字段的Shell程序不存在、不合法,或执行失败,则无法登录主机。
父Shell、子Shell
当在执行一个Shell Script时,父Shell会根据Script程序的第一行#!之后指定的Shell程序开启一个子Shell环境,然后在子Shell中执行此Shell Script。一旦子Shell中的Script执行完毕,此子Shell随即结束,回到父Shell中,不会影响父Shell原本的环境。
子Shell环境拥有与父Shell相同的环境变量、标准输入、输出、错误等。
例如:
test.sh文件内容
#!/bin/bash
cd /var/www/html
命令行:chmod +x /test.sh
命令行:./test.sh
执行完脚本后还原到父Shell,并且父Shell并没有进入/var/www/html目录。
注:这是因为当执行Shell文件时,父Shell会创建子Shell,各自独立。
如果需要使用父Shell来执行此脚本,可以使用:
命令行:. ./test.sh
注意.与./之间有一个空格符
子Shell继续开启子Shell
与父Shell启动子Shell方式一样,继续调用下去,即子Shell开启子Shell。
通过$SHLVL变量,可以知道当前所在Shell的层次
Login Shell
登录主机后,在执行Bash Script之前,其实我们已经处于一个BashShell中。
这个Shell叫login Shell,是将来我们执行任何Script的上层环境。又叫父SHell
其实每个帐号都可以自定义loginShell。以Linux来说,帐号的login Shell定义在/etc/passwd这个文件中。
/etc/passwd的每一行代表一个帐号,共有7个字段,之间用:隔开。
帐号:x:UID 使用者代码:GID 群组代码:用户信息:主目录:login shell路径
第二栏x为密码栏,基于系统安全考虑,编码后的密码已经被放入/etc/passwd文件中。
login Shell定义在第7个字段,如果这个字段的Shell程序不存在、不合法,或执行失败,则无法登录主机。
父Shell、子Shell
当在执行一个Shell Script时,父Shell会根据Script程序的第一行#!之后指定的Shell程序开启一个子Shell环境,然后在子Shell中执行此Shell Script。一旦子Shell中的Script执行完毕,此子Shell随即结束,回到父Shell中,不会影响父Shell原本的环境。
子Shell环境拥有与父Shell相同的环境变量、标准输入、输出、错误等。
例如:
test.sh文件内容
#!/bin/bash
cd /var/www/html
命令行:chmod +x /test.sh
命令行:./test.sh
执行完脚本后还原到父Shell,并且父Shell并没有进入/var/www/html目录。
注:这是因为当执行Shell文件时,父Shell会创建子Shell,各自独立。
如果需要使用父Shell来执行此脚本,可以使用:
命令行:. ./test.sh
注意.与./之间有一个空格符
子Shell继续开启子Shell
与父Shell启动子Shell方式一样,继续调用下去,即子Shell开启子Shell。
通过$SHLVL变量,可以知道当前所在Shell的层次
相关文章推荐
- 如何写一个shell脚本并运行
- [Linux]不同方法运行shell脚本的区别
- Ubuntu下shell脚本运行异常:bash和dash的区别
- Ubuntu下shell脚本运行异常:bash和dash的区别
- Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本
- shell脚本同一时间只能有一个在运行
- [shell应用进阶]:限制同时运行脚本实例的个数 -- 串行化:换一个思路。
- SHELL脚本运行的几种方法以及区别
- Shell脚本实例(一) 监控一个程序的运行情况
- Linux执行shell脚本方式及区别&命令后台运行
- Ubuntu下shell脚本运行异常:bash和dash的区别
- 用shell脚本编写区别两个文件夹内文件的不同
- 写了一个简单的shell脚本监控mysql服务器运行状态
- 在linux下创建一个可运行shell脚本
- 一个脚本实例浅析shell脚本中$@与$*的区别
- 分享一个遍历当前文件夹下所以子目录,并在子目录中执行其他操作的shell脚本
- Linux:shell脚本反复运行同一个程序
- 如何确保 Shell 脚本只有一个实例运行
- 同样大小的文件,一个是压缩文件,一个是文件夹,为什么传送到U盘的速度有如此大的区别?
- Linux执行shell脚本方式及区别&命令后台运行