![为什么我不能直接执行.bashrc,什么是“采购”?](https://linux22.com/image/152098/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%E6%89%A7%E8%A1%8C.bashrc%EF%BC%8C%E4%BB%80%E4%B9%88%E6%98%AF%E2%80%9C%E9%87%87%E8%B4%AD%E2%80%9D%EF%BC%9F.png)
我的 .bashrc 具有以下权限:-rwXr-Xr-X
所以它被标记为“可执行”。因此我应该能够运行它。
但当我尝试时
$ ./.bashrc
我得到:
./.bashrc: line 6: return: can only `return' from a function or sourced script
.bashrc 的第 5 行和第 6 行:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
我用谷歌搜索了这个问题,下面的“source”命令完美地满足了我的需要:
$ source .bashrc
问题:
1-为什么我不能直接运行 ./.bashrc 以及这一行的作用:
[ -z "$PS1" ] && return
2- 什么是“源脚本”以及“源”命令的具体作用是什么?(我的系统上没有“源”的手册页)
答案1
source
之前已经讨论过使用(或使用.
,这是标准命令)获取点脚本和将其作为自己的脚本运行之间的区别。
参见例如“采购(“.”或“源”)和在 bash 中执行文件有什么区别?”。这归结为在其自己的单独环境(不带source
或.
)中运行脚本与在当前的shell环境,如果您需要为当前shell设置环境变量和shell选项等,这就是您想要做的。在脚本中设置 shell 选项或导出变量(不使用source
或运行.
)不会影响父 shell。
您询问的特定测试,
[ -z "$PS1" ] && return
$PS1
如果主提示, 为空,将从点脚本返回。这是测试当前 shell 会话是否交互式的一种方法。如果它不是交互式的,则PS1
不会设置变量并且提示符将为空,在这种情况下,脚本的其余部分(大概)不需要运行,因为它可能只处理需要在交互式 shell 中初始化的内容。
点脚本需要使用return
而不是exit
as 来终止当前 shell 会话,这与使用或exit
调用脚本的会话相同。因此,点脚本的行为非常像 shell 函数。source
.