下篇文章:【嵌入式开发 Linux 常用命令系列 14.1 – .bashrc 定义函数】
问题背景:
创建了目录~/.local/bin
并将其在.bashrc
文件中添加到path
中,export PATH=$PATH:/home/sam/.local/bin
。 在 ~/.local/bin
创建一个 shell 脚本 hello.sh
。
当我在终端直接执行hello
时会报错,但是如果我按照下面方法执行 helo.sh
脚本就没有问题,方法如下:
在 .bashrc
中添加alias mk-hello =‘source ~/.local/bin/hello.sh’
然后在终端执行 mk-hello
时就没有报错。
接下来将详细介绍这两者的区别。
source
命令在当前 shell 的上下文环境中执行脚本。这意味着脚本中所有的变量、函数和修改环境变量的命令,都会影响到当前的 shell 环境。source
命令不需要脚本文件具有执行权限,只需要读取权限就可以。exit
,它会导致当前 shell 会话退出。./hello.sh
方式执行脚本会在一个新的子 shell 中运行,不会影响当前 shell 的环境(变量、函数定义等不会‘泄漏’到当前环境中)。chmod +x hello.sh
命令来添加执行权限)。exit
,它只会终止子 shell,不会影响到父 shell。选择使用 source
还是 ./
执行脚本,通常取决于你的目标:
source
命令。./
方式执行会更合适。