source 命令
source 命令 (从 C Shell 而来) 是 bash shell 的内置命令。
点命令(就是一个点符号.,从 Bourne Shell 而来) 是 source 的另一名称。
这两个命令都以一个脚本文件名为参数,该脚本将作为当前 shell 的环境执行,即不会启动一个新的子进程。所有在脚本中设置的变量将成为当前 Shell 的一部分,同样的,当前脚本中设置的变量也将作为脚本的环境。
source (或.) 命令通常用于重新执行刚修改的初始化文件,如 .bash_profile 和 .profile 等等。例如,如果在登录后对 .bash_profile 中的 EDITER 和 TERM 变量做了修改,则可以用 source 命令重新执行 .bash_profile 中的命令而不用注销并重新登录。像 .bash_profile 或其它类似的 Shell 脚本这样,文件无需可执行权限即可用 source 或点命令执行。
source 命令的一个妙用
在编译核心时,常常要反复输入一长串命令,如
make mrproper
make menucon**
make dep
make clean
make bzImage
…….
这些命令既长,又繁琐。而且有时候容易输错,浪费你的时间和精力。如果把这些命令做成一个文件,让它自动按顺序执行,对于需要多次反复编译核心的用户来说,会很方便。用 source 命令可以办到这一点。它的作用就是把一个文件的内容当成是 shell 来执行。
例如,先在 /usr/src/linux-2.4.20 目录下建立一个文件,取名为 make_command:
在其中输入如下内容:
make mrproper &&
make menucon** &&
make dep &&
make clean &&
make bzImage &&
make modules &&
make modules_install &&
cp arch/i386/boot/bzImge /boot/vmlinuz_new &&
cp System.map /boot &&
vi /etc/lilo.conf &&
lilo -v
文件建立好之后,以后每次编译核心,只需要在 /usr/src/linux-2.4.20 下输入
source make_command
就行了。这个文件也完全可以做成脚本,只需稍加改动即可。这里主要是让大家理解 source 的用法。如果你用的不是 lilo 来引导系统,可以把最后两句话去掉。配置你自己的引导程序来引导新内核。
shell 编程中的命令有时和 C 语言是一样的。&& 表示与,|| 表示或。把两个命令用 && 接起来,如 make mrproper && make menucon** ,表示要第一个命令执行成功才能执行第二个命令。对执行顺序有要求的命令能保证一旦有错误发生,下面的命令不会盲目地继续执行。
运行如下命令./set_env.sh设置相关环境变量时发现:当此命令运行结束后,脚本中所设置的环境变量仍为空,感觉此脚本没有执行;运行. set_env.sh脚本执行成功。通过上网查询,发现是由于source命令与shell scripts的作用范围不同而导致的。
source命令与shell scripts的区别:
source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。