为什么我不能直接执行.bashrc,什么是“采购”?

为什么我不能直接执行.bashrc,什么是“采购”?

我的 .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而不是exitas 来终止当前 shell 会话,这与使用或exit调用脚本的会话相同。因此,点脚本的行为非常像 shell 函数。source.

相关内容