大佬教程收集整理的这篇文章主要介绍了在 lua 模块文件中包含源 shell 脚本,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为已安装在集群上的应用程序创建模块文件。要运行该程序,我必须运行一个名为“phenix_env.sh”的脚本,其中包含以下内容:
@H_607_4@#!/bin/sh
#
export PHENIX="/src/phenix-1.19.2-4158"
export PHENIX_VERSION=1.19.2-4158
. $PHENIX/build/setpaths.sh
@H_607_4@# THIS IS AN autoMATICALLY GENERATED file.
# DO NOT EDIT! CHANGES WILL BE LOST.
ocwd="`pwd`"
if [ -n "$liBTBX_BUILD_RE@R_675_5352@N_HINT" ]; then
cd "$liBTBX_BUILD_RE@R_675_5352@N_HINT"
liBTBX_BUILD_RE@R_675_5352@N_HINT=
export liBTBX_BUILD_RE@R_675_5352@N_HINT
elif [ -n "$BASH_sourcE" ]; then
liBTBX_BUILD=`dirname "$BASH_sourcE[0]"`
cd "$liBTBX_BUILD"
else
cd "/util/opt/phenix/1.19.2/gcc/9.1/phenix-1.19.2-4158/build"
fi
liBTBX_BUILD=`pwd -P`
export liBTBX_BUILD
liBTBX_OPATH="$PATH"
export liBTBX_OPATH
PATH="$liBTBX_BUILD/bin:$PATH"
export PATH
# DIALS_ENABLE_COMMAND_liNE_COMPLETION
[ -n "$BASH_VERSION" ] && {
source $(libtbx.find_in_repositorIEs dials/util/autocomplete.sh) && source $liBTBX_BUILD/dials/autocomplete/bash.sh || echo dials command line completion not available
}
cd "$ocwd"
ocwd=
alias libtbx.setpaths_all=". \"$liBTBX_BUILD/setpaths_all.sh\""
alias libtbx.unsetpaths=". \"$liBTBX_BUILD/unsetpaths.sh\""
if [ -n "$liBTBX_OPATH" ]; then
liBTBX_TMPVAL="$liBTBX_OPATH"
else
liBTBX_TMPVAL=
fi
export liBTBX_TMPVAL
PATH=`libtbx.path_utility prepend liBTBX_TMPVAL "$liBTBX_BUILD/bin" < /dev/null`
export PATH
if [ "$PATH" = "L_I_B_T_B_X_E_M_P_T_Y" ]; then unset PATH; fi
liBTBX_TMPVAL=
liBTBX_OPATH=
liBTBX_BUILD=
知道如何为其创建模块文件吗?
你不能。
Lua 在子 sHell 中执行 sHell 脚本。
这意味着所有 cd
和 export
命令只会影响该子 sHell,而不影响 Lua 脚本运行所在的父 sHell。
换句话说,从 os.execute
如果允许 require()
使用 C 编写的 Lua 模块,则可以解决此问题。
您需要一个模块,它提供 OS 原生函数的包装器,用于更改当前目录和设置 env 变量。
使用最新版本的环境模块 (>=4.6),sh-to-mod
子命令使您能够生成一个模块文件,其中包含作为参数传递的脚本所做的结果环境更改
$ module sh-to-mod sh ./phenix_env.sh
#%Module
prepend-path PATH /home/user/bin
set-alias libtbx.setpaths_all {. "/home/xa/setpaths_all.sh"}
set-alias libtbx.unsetpaths {. "/home/xa/unsetpaths.sh"}
setenv LIBTBX_BUILD {}
setenv LIBTBX_OPATH {}
setenv LIBTBX_TMPVAL {}
setenv PHENIX /src/phenix-1.19.2-4158
setenv PHENIX_VERSION 1.19.2-4158
请注意,此处获得的结果并不完全准确,因为我刚刚复制了您描述的脚本,但我没有安装 phenix
软件,该软件被调用以完全设置环境。
另见此答案:How to automatically generate the modulefile for Intel compilers
以上是大佬教程为你收集整理的在 lua 模块文件中包含源 shell 脚本全部内容,希望文章能够帮你解决在 lua 模块文件中包含源 shell 脚本所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。