浅析shell中source命令和.逗号命令对当前父shell的影响
2011-01-25 15:19
239 查看
lu1() {
echo 'aaaaaaaaa'
}
lu2() {
echo 'bbbbbbbbb'
}
上面就是,run.sh的源码了,可以看到只有2个函数定义没有任何地方来调用这两个函数,那么我们如果这样执行:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$
可以看到什么都没有,因为没有地方调用这2个函数,我们希望在我们的luther@gliethttp:~$ 提示符后面调用这2个函数,来试试,
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$
结果都提示找不到命令,是不是我们的这个需求shell还不提供支持呢,当然不是,这样有用的需求shell早就为我们做好解决方案了,来看看怎么实现,
shell中有2个命令可以完成我们的工作,一个是source另一个就是和source等效的.逗号运算符:
luther@gliethttp:~$ . run.sh或者luther@gliethttp:~$source run.sh
这样我们run.sh脚本中创建的变量和函数就添加到了执行.或source的shell,直到关闭该shell窗口,否则run.sh中创建的变量和函数将一直有效,
如果我们只是执行./run.sh启动一个subshell来运行我们的run.sh脚本,那么run.sh脚本中的变量和函数将紧紧影响到由shell启动的subshell,当./run.sh脚本退出之后,run.sh变量和函数的影响寿命也到了尽头。
来看看现在的现象:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$ . run.sh
luther@gliethttp:~$ lu1
aaaaaaaaa
luther@gliethttp:~$ lu2
bbbbbbbbb
luther@gliethttp:~$
重新启动一个新shell:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$ source run.sh
luther@gliethttp:~$ lu1
aaaaaaaaa
luther@gliethttp:~$ lu2
bbbbbbbbb
luther@gliethttp:~$
echo 'aaaaaaaaa'
}
lu2() {
echo 'bbbbbbbbb'
}
上面就是,run.sh的源码了,可以看到只有2个函数定义没有任何地方来调用这两个函数,那么我们如果这样执行:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$
可以看到什么都没有,因为没有地方调用这2个函数,我们希望在我们的luther@gliethttp:~$ 提示符后面调用这2个函数,来试试,
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$
结果都提示找不到命令,是不是我们的这个需求shell还不提供支持呢,当然不是,这样有用的需求shell早就为我们做好解决方案了,来看看怎么实现,
shell中有2个命令可以完成我们的工作,一个是source另一个就是和source等效的.逗号运算符:
luther@gliethttp:~$ . run.sh或者luther@gliethttp:~$source run.sh
这样我们run.sh脚本中创建的变量和函数就添加到了执行.或source的shell,直到关闭该shell窗口,否则run.sh中创建的变量和函数将一直有效,
如果我们只是执行./run.sh启动一个subshell来运行我们的run.sh脚本,那么run.sh脚本中的变量和函数将紧紧影响到由shell启动的subshell,当./run.sh脚本退出之后,run.sh变量和函数的影响寿命也到了尽头。
来看看现在的现象:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$ . run.sh
luther@gliethttp:~$ lu1
aaaaaaaaa
luther@gliethttp:~$ lu2
bbbbbbbbb
luther@gliethttp:~$
重新启动一个新shell:
luther@gliethttp:~$ ./run.sh
luther@gliethttp:~$ lu1
bash: lu1: command not found
luther@gliethttp:~$ lu2
bash: lu2: command not found
luther@gliethttp:~$ source run.sh
luther@gliethttp:~$ lu1
aaaaaaaaa
luther@gliethttp:~$ lu2
bbbbbbbbb
luther@gliethttp:~$
相关文章推荐
- 浅析shell中source命令和.逗号命令对当前父shell的影响
- shell中source命令和.点命令对当前父shell的影响
- linux命令介绍:source -- 在当前shell环境中执行指定文件中的命令
- [转]shell中 source命令即点空格后面再跟可执行文件的说明
- shell中的source命令的巧妙用法
- linux source命令与sh shell scripts的区别
- Shell命令编写——查看当前登陆用户的登录时间ac,last
- shell中的点命令与source命令
- dirname命令介绍-使用dirname在shell脚本中获取当前脚本文件所在的绝对路径
- 通过shell命令查看当前运行应用
- Linux命令exit - 退出当前shell
- shell脚本支持source命令
- 【一天一个shell命令】好管家-查看当前登录用户-who
- 【source命令在shell脚本中执行为何不生效】source not working from within shell script
- linux下shell脚本执行方法及exec和source命令
- Shell命令编写——查看当前用户who
- 通过 adb shell dumpsys 命令获取当前应用的 component
- Shell 的source命令
- Linux命令exit - 退出当前shell
- Shell 的source命令