曲径通幽论坛

标题: . 点命令(source命令) [打印本页]

作者: beyes    时间: 2009-1-22 01:36
标题: . 点命令(source命令)
点 (.) 命令在当前的 shell 中执行命令:
. ./shell_script

一般地,当一个脚本执行一个外部命令或脚本时,将建立一个新的环境( a subshell ),则命令就在这个新建立的环境中执行。完后,除了返回给“父shell”(parent shell)的退出代码外,之前被建立那个新的环境将被弃而不用。然而,外部命令 source 和 . 命令(两个命令意义一样) 在调用脚本的shell里(同一个 shell)运行脚本里的命令。

默认情况下,当一个 shell 脚本被执行时同时也创建了一个新的环境,任何对这个脚本创建的环境变量的改变都将丢失。 另一方面,点命令则允许被执行的脚本改变当前的环境。这样往往在你希望用脚本作为一个“封装器”来设置你的环境以供后来的一些其它命令的执行时这种情况会比较有用。例如,当你同时工作在几个项目上时,你可能发现你需要以不同的参数来调用命令,也许是为了维护一份旧的程序而调用一个较旧版本的编译器。

在 shell 脚本中,点命令的工作机理有点像 C或C++ 里边的 #include 。尽管它没有逐字地包含脚本,但它在当前的上下文中执行命令,所以你可以用它把变量和函数的定义整合到一个脚本中。

 
1、假设有两个包含着为两个开发环境而建立的环境变量设定文件。一个对应旧环境设定的的脚本为“classic_set”,如下面代码:
#!/bin/sh

version=classic
PATH=/usr/local/lod_bin:/usr/bin:/bin:.
PS1="classic> "

2、对应新环境而设定的新脚本为“latest_set”
#!/bin/sh

version=latest
PATH=/usr/local/new_bin:/usr/bin:/bin:.
PS1=" latest version> "

运行:
$ . ./classic_set
classic> echo $version
classic
classic> . /latest_set
latest version> echo $version
latest
latest version>

说明:
脚本使用点命令执行,所以每一个脚本都在当前的shell中执行。这就使得脚本可以在当前的 shell 里改变环境设定,当脚本执行完毕后这些变更仍能得到保持。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2