在.bashrc中执行bash脚本

在.bashrc中执行bash脚本

你好,我很好奇是否可以在 bash rc 中执行 bash 脚本。除非有某种方法告诉它不要尝试启动新的 shell,否则它似乎会创建一个无限循环。

这是一个例子

bash_script.sh:

#!/bin/bash
echo Hello World

.bashrc

export HELLO_WORLD=$(bash_script.sh)    

答案1

脚本由非交互式 shell 执行,而.bashrc仅由交互式 shell 自动获取。


不过,有一种方法可以触发无限循环。每一个 bashshell,无论是否交互式,都会检查变量是否BASH_ENV已设置,如果设置了,则使用其值作为源文件的名称。在这种情况下,bash从该文件执行脚本将导致无限循环,因此必须采取这些措施。但实际上,该脚本(正如其名称所示)仅用于设置 shell 使用的环境变量,而不是执行任意代码。

答案2

好吧,我想出了如何做到这一点。在 .bashrc 中只需执行以下操作:

export HELLO_WORLD=$(source bash_script.sh)

答案3

您无需执行任何操作。简单地启动 bash 脚本不会导致您的.bashrc被调用。

只有.bashrc当 bash 是交互式的时候,你的 will 才会被调用。当您启动脚本时,该脚本不是交互式的。

从 bash 手册页:

交互式 shell 是一种不带非选项参数且不带 -c 选项的 shell,其标准输入和错误都连接到终端(由 isatty(3) 确定),或者是一种使用 -i 选项启动的 shell。如果 bash 是交互式的,则 PS1 已设置并且 $- 包括 i,允许 shell 脚本或启动文件测试此状态。

这里重要的一点是“在没有非选项参数的情况下启动”。当您启动脚本时,bash 的第一个参数是该脚本的路径。因此它有一个非选项参数并且不是交互式的。

答案4

将其作为第 1 行:

[ -z "$PS1" ] && return # If not interactive, exit

相关内容