我正在使用一个名为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中,以获取它