程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 lua 模块文件中包含源 shell 脚本大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 lua 模块文件中包含源 sHell 脚本?

开发过程中遇到在 lua 模块文件中包含源 sHell 脚本的问题如何解决?下面主要结合日常开发的经验,给出你关于在 lua 模块文件中包含源 sHell 脚本的解决方法建议,希望对你解决在 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

然“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 脚本。
这意味着所有 cdexport 命令只会影响该子 sHell,而不影响 Lua 脚本运行所在的父 sHell。
换句话说,从 os.execute

返回后,您的更改将无效

如果允许 require() 使用 C 编写的 Lua 模块,则可以解决此问题。
您需要一个模块,它提供 OS 原生函数的包装器,用于更改当前目录和设置 env 变量。

,

使用最新版本的环境模块 (>=4.6),sh-to-mod 子命令使您能够生成一个模块文件,其中包含作为参数传递的脚本所做的结果环境更改

@H_607_4@$ 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,请注明来意。