在 .bashrc 里加了个 alias,保存后敲命令还是提示找不到。不是没写对,是当前这个终端还没重新读配置。

source 是 bash 的内置命令,作用是读取一个脚本文件并在当前环境里逐行执行。名字听着抽象,用起来就一句话的事。

source 和点号是一回事

source ~/.bashrc 和 . ~/.bashrc 效果相同,点号后面必须有一个空格。它让脚本在当前 shell 里执行,不另开子进程,脚本里定义的变量、alias、函数都会留在当前会话。改完配置立刻生效,不用关终端重开。

和 sh 执行的区别

用 sh test.sh 或者 ./test.sh 跑,系统会开一个子 shell,脚本里 export 的变量出了脚本就没了。source 不会,所以改完环境变量想马上用,只能 source。另一个差别是 source 只要有读权限,直接执行还得有执行权限。脚本里写了 exit,source 会把当前终端一起关掉,这点要留神。source 只影响当前这个终端窗口,另开一个窗口还是旧配置,想让新终端都生效,得把配置写进启动文件。

最常 source 的几个文件

  • ~/.bashrc:当前用户的 alias 和提示符配置
  • ~/.bash_profile 或 ~/.profile:登录时加载的环境变量
  • /etc/profile:全局配置,改完所有用户生效
  • venv/bin/activate:进 Python 虚拟环境,本质也是 source

提示找不到文件的几种情况

路径写错最常见,当前目录下的脚本要写 source ./test.sh,少个点就找不到。用 sudo 切换用户后 source 的是 root 的家目录,配置自然对不上。zsh 用户改的是 .zshrc,source .bashrc 不报错但也不起作用。文件名带空格时要加引号,不然会被当成两个参数。改 /etc/profile 需要 root 权限,改完对所有用户生效,动之前先备份一份。

记住一点:想让改动影响当前终端,用 source;想让脚本独立跑完退出,用 sh 或 bash。linux source 命令本身很简单,搞混这两个场景才是大部分问题的来源。