我正在阅读一些文字,其中指出:
每次生成 BASH shell 时(例如运行 shell 脚本时),实际上都会执行 .bashrc shell 配置文件。换句话说,每次创建子 shell 时,都会执行 .bashrc 文件。这可以导出您在 .bashrc shell 初始化文件中定义的任何局部变量或别名。
我还读到,每次我执行一个 shell 脚本(比如说脚本1),则创建一个子 shell。因此,当创建这个子 shell 时,.bashrc文件必须执行,因此别名定义在.bashrc必须在子 shell 中可用(但实际上不可用)。如果别名在此子 shell 中不可用,那么它们如何在主 shell(我通过它执行我的脚本)中可用?
答案1
是的,在 Linux 的 bash shell 中你可以说
source /path/to/my_lib.sh
用于从文件加载别名定义。或者,为了降低复杂性,您可以简单地将该别名定义复制到 bash 脚本中。
但等等!这只会创建别名,可能带有
alias foo3 foo9 # describe these two aliases: declare errors if one doesn't exist
您将享受新的别名定义,但是在启用别名扩展之前运行它们将会失败:
shopt -s expand_aliases # alias xpn ON
另请考虑:
shopt -u expand_aliases # alias xpn OFF
或者
shopt expand_aliases # query whether
或者
unalias foo3 foo9 # delete these aliases
答案2
如果您已定义别名script1.sh
并且希望它们在任何地方都可用,请添加到您的.bashrc
文件中:
source /path/to/script1.sh
或者:
. /path/to/script1.sh
为了避免脚本不存在时出现错误,您可以使用:
if [ -f /path/to/script1.sh ]; then source /path/to/script1.sh; fi
对于您在 中定义的任何函数同样适用script1.sh
。