linux 的 source命令

本文介绍了Linux中bash shell的source命令,它以脚本为参数,在当前shell环境执行,不启动新子进程,常用于重新执行修改后的初始化文件。还介绍了其在编译核心时的妙用,可将长命令做成文件自动执行,同时提到shell编程中命令与C语言类似,&&表示与。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 menuconfig

make dep

make clean

make bzImage

.......

这些命令既长,又繁琐。而且有时候容易输错,浪费你的时间和精力。如果把这些命令做成一个文件,让它自动按顺序执行,对于需要多次反复编译核心的用户来说,会很方便。用source命令可以办到这一点。它的作用就是把一个文件的内容当成是shell来执行。先在/usr/src/linux-2.4.20目录下建立一个文件,取名为make_command:

在其中输入如下内容:

make mrproper &&

make menuconfig &&

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 menuconfig ,表示要第一个命令执行成功才能执行第二个命令。对执行顺序有要求的命令能保证一旦有错误发生,下面的命令不会盲目地继续执行。

 

 

原文 :Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1451617

<think>我们正在讨论Linux中的source命令source命令用于在当前Shell环境中执行指定文件中的命令,而不是在子Shell中执行。这使得文件中设置的变量和函数在当前Shell会话中可用。 常见用途包括:重新加载配置文件(如.bashrc)、设置环境变量等。 基本语法: source filename [arguments] 或 . filename [arguments] (注意点号后面有空格) 其中,`filename`是要执行的脚本文件名,`[arguments]`是传递给脚本的参数。 示例: 1. 重新加载.bashrc文件: source ~/.bashrc 或 . ~/.bashrc 2. 执行一个设置环境变量的脚本: 假设我们有一个脚本env_setup.sh,内容如下: #!/bin/bash export MY_VAR="Hello World" 然后我们执行: source env_setup.sh 之后,变量MY_VAR就在当前Shell中可用了,可以通过echo $MY_VAR查看。 3. 传递参数给脚本: 假设脚本test.sh内容如下: #!/bin/bash echo "First arg: $1" echo "Second arg: $2" 执行: source test.sh arg1 arg2 注意事项: - 使用source执行的脚本不需要有可执行权限(即不需要chmod +x),因为它是被当前Shell读取并执行的。 - 与直接运行脚本(如./script.sh)不同,source不会创建子Shell,因此脚本中定义的变量和函数在脚本执行完毕后仍然存在于当前Shell中。 另外,source命令bash的内置命令,所以可以使用`help source`来查看帮助。 引用说明:上述内容参考了Linux bash手册以及常见的Shell编程实践[^1]。 §§相关问题§§ 1. source命令和直接执行脚本有什么区别? 2. 如何在脚本中使用source命令来包含其他脚本? 3. source命令在哪些场景下特别有用? 4. 如何检查一个脚本是否被source执行(而不是在子Shell中执行)?</think>### Linuxsource命令的用法与示例 `source`是Linux/Unix系统中的内置Shell命令,用于**在当前Shell环境中执行脚本文件**(而非创建子Shell)。其核心功能是使脚本中的变量、函数或环境设置立即生效,常用于配置文件加载或环境初始化。 #### ✅ 基本语法 ```bash source 文件名 [参数] # 或简写为 . 文件名 [参数] # 注意点号后有空格 ``` #### 🔧 主要用途 1. **加载配置文件**(如`.bashrc`、`.profile`) 2. **设置环境变量**(对当前终端生效) 3. **定义函数**(可在当前会话直接调用) 4. **激活虚拟环境**(如Python的`venv`) --- ### 📝 实用示例 #### 示例1:重新加载Shell配置 ```bash # 修改.bashrc后立即生效(无需重启终端) source ~/.bashrc # 等效命令 . ~/.bashrc ``` #### 示例2:设置持久环境变量 创建脚本`env_vars.sh`: ```bash # 内容:设置API密钥 export API_KEY="12345-abcde" export PATH="$PATH:/opt/myapp/bin" ``` 加载并验证: ```bash source env_vars.sh echo $API_KEY # 输出 12345-abcde echo $PATH # 包含/opt/myapp/bin ``` #### 示例3:定义并调用函数 创建`math_functions.sh`: ```bash add() { echo $(($1 + $2)) } multiply() { echo $(($1 * $2)) } ``` 使用函数: ```bash source math_functions.sh add 5 3 # 输出 8 multiply 4 6 # 输出 24 ``` #### 示例4:激活Python虚拟环境 ```bash # 创建环境 python -m venv myenv # 激活环境 source myenv/bin/activate # 退出环境 deactivate ``` #### 示例5:带参数执行脚本 创建`greet.sh`: ```bash echo "Hello, $1!" ``` 运行: ```bash source greet.sh Alice # 输出 Hello, Alice! ``` --- ### ⚠️ 注意事项 1. **与`./script.sh`的区别**: - `./script.sh`:在子Shell中执行,变量/函数不保留 - `source script.sh`:在当前Shell执行,修改会持久化 ```bash ./set_var.sh && echo $VAR # 变量不存在 source set_var.sh && echo $VAR # 输出变量值 ``` 2. **权限要求**: - 被`source`的文件**无需执行权限**(`chmod +x`不是必须的) 3. **错误处理**: - 脚本中的错误会中断当前Shell会话(如`exit`命令) - 建议用`set -e`提前终止错误执行[^1] --- ### ❓ 相关问题 1. `source`和`export`在设置环境变量时的区别是什么? 2. 如何在脚本中检测当前是否被`source`执行? 3. 使用`source`加载配置有哪些安全风险? 4. 为什么修改`/etc/profile`后建议用`source`而非重启?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值