如何在需要访问当前shell实例的shell脚本函数中运行命令



我正在使用一个名为spack的自定义包管理器,它允许我使用spack load命令加载已安装的模块。它在许多方面与熟悉的module load命令相似。我正在使用zsh。

我已经设置了一个带有函数的shell脚本,稍后我想将该函数插入到我的.zshrc文件中。它目前位于一个独立的文件中,用于测试目的,如下所示:

#!/bin/bash
load-standard () {
echo "loading $1"
spack load $1
}
load-standard $1

当我用源./script_name package_name运行这个脚本时,我收到一条错误消息,上面写着

`spack load` requires Spack's shell support.

要启用Spack的shell支持,必须运行一个名为setup-env.sh的文件,该文件允许用户使用spack命令。

但是,直接输入命令spack load package_name是没有问题的。

我一直认为从shell脚本运行命令与在当前shell中键入命令相同。如何让我的shell像直接输入命令一样准确地解释spack load命令?

编辑:将函数放在我的.zshrc文件中解决了这个问题。

我不熟悉spack,但spack可能是一个修改当前shell环境的shell函数。这就是module的工作原理。type spack进行检查。

你不能从脚本中修改shell环境,你可以从shell函数中修改。

将函数load-standard复制并粘贴到"$ZDOTDIR/.zshrc"(用于当前用户,/etc/zshrc用于所有用户(、源.zshrc(. "$ZDOTDIR/.zshrc"(,您应该可以(无需重新启动(。

您也可以在一个文件中创建一个函数列表,并将. /path/to/functions添加到zshrc中,以获取它

相关内容

  • 没有找到相关文章

最新更新