我如何 运行 shell 脚本函数中需要访问当前 shell 实例的命令?
How can I run a command in a shell script function that requires access to the current shell instance?
我正在使用一个名为 spack 的自定义包管理器,它允许我使用 spack load
命令加载已安装的模块。它在许多方面类似于熟悉的 module load
命令。我正在使用 zsh。
我已经设置了一个 shell 脚本,其中包含我稍后想插入到我的 .zshrc 文件中的函数。它目前位于用于测试目的的独立文件中,如下所示:
#!/bin/bash
load-standard () {
echo "loading "
spack load
}
load-standard
当我 运行 这个源代码为 ./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,以获取它。
我正在使用一个名为 spack 的自定义包管理器,它允许我使用 spack load
命令加载已安装的模块。它在许多方面类似于熟悉的 module load
命令。我正在使用 zsh。
我已经设置了一个 shell 脚本,其中包含我稍后想插入到我的 .zshrc 文件中的函数。它目前位于用于测试目的的独立文件中,如下所示:
#!/bin/bash
load-standard () {
echo "loading "
spack load
}
load-standard
当我 运行 这个源代码为 ./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,以获取它。