在脚本中采购 bashrc.user 时出现问题

Problem occurs when sourcing bashrc.user in script

我在尝试获取 .bashrc.user 文件时遇到问题。当我在终端中获取文件时它工作正常,没有任何抱怨。但是当我试图在我的 bash 脚本中做同样的事情时,它出现了一些问题。这是我的代码的样子:

comm -13 <(sort -u ~/.bashrc.user) <(sort -u ~/my_script/bashrc.user) > bashrc_diff
if [ -s bashrc_diff ]; then
    cat bashrc_diff >> ~/.bashrc.user
    source ~/.bashrc.user
    printf ".bashrc.user has been configured successfully!\n"
else
    printf ".bashrc.user is up-to-date!\n"
fi
rm bashrc_diff
source ~/.bashrc.user

所以每当我在我的脚本中执行这段代码时,它都会给出错误并说 module: command not found。在 .bashrc.user 文件中有一些模块命令执行 module add git/2.22.0 等操作。正如我之前提到的,当我从终端获取它时它工作正常但在脚本中使用相同类型的命令抱怨,什么可能是这里的问题?

当您使用终端时,您正在 运行ning 一个 bash 的实例,它已经以某种方式初始化:Startup files 将被执行以配置您的环境。

其中一个 startup files 导致定义了 shell 函数 module

根据您的评论,此函数定义为:

module(){
    { eval `/app/modules/0/bin/modulecmd bash "$@"` } 2>&1
}

要在 运行 脚本时不再看到错误,您可以在 startup files 中查找定义 module 的位置,然后在 运行 中查找相同的命令脚本的开头。

或者,您可以尝试只将上面的 module 函数定义复制到您的脚本中。但是,如果定义 module 的代码进行了您不复制的其他设置,这可能会在以后导致其他错误。

除此之外,您还应该注意,只有当内容完全是独立的行时,才可以将 ~/.bashrc 的行重新排列为 sort 才有意义 运行 任意顺序。