-1

我在尝试获取 .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。正如我之前提到的,当我从终端获取它时它工作正常,但在脚本中使用相同类型的命令抱怨,这可能是什么问题?

4

1 回答 1

1

当您使用终端时,您正在运行一个已以某种方式初始化的 bash 实例:将执行启动文件来配置您的环境。

其中一个启动文件导致module定义了一个 shell 函数。

根据您的评论,此功能定义为:

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

要在运行脚本时停止看到错误,可以在启动文件中查找定义的位置,module然后在脚本开头运行相同的命令。

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

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

于 2021-08-12T09:18:58.120 回答