将源shell脚本包含在lua模块文件中
2021-5-20 17:3:42
收藏:0
阅读:174
评论:2
我正在尝试为集群上安装的应用程序创建模块文件。要运行该程序,我必须运行一个名为“phenix_env.sh”的脚本,其中包含以下内容:
#!/bin/sh
#
export PHENIX="/src/phenix-1.19.2-4158"
export PHENIX_VERSION=1.19.2-4158
. $PHENIX/build/setpaths.sh
而“setpaths.sh”包含以下内容
# THIS IS AN AUTOMATICALLY GENERATED FILE.
# DO NOT EDIT! CHANGES WILL BE LOST.
ocwd="`pwd`"
if [ -n "$LIBTBX_BUILD_RELOCATION_HINT" ]; then
cd "$LIBTBX_BUILD_RELOCATION_HINT"
LIBTBX_BUILD_RELOCATION_HINT=
export LIBTBX_BUILD_RELOCATION_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=
有什么好主意可以为它创建模块文件吗?
点赞
用户9981498
最近版本的 Environment Modules(>=4.6)中,sh-to-mod 子命令允许您生成一个 modulefile,其中包含作为参数传递的脚本所做的环境更改。
$ 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 的软件来完全设置环境。
另请参见此答案:如何自动为 Intel 编译器生成 modulefile。
2021-05-06 18:34:06
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

你不能。
Lua 在子 shell 中执行 shell 脚本。
这意味着所有的
cd和export命令只会影响子 shell,而不是运行 Lua 脚本的父 shell。换句话说,在从
os.execute返回后,你的更改将被撤消。如果你被允许
require()一个用 C 编写的 Lua 模块,你可以通过它来解决这个问题。你需要一个提供 os 原生函数的包装器的模块,用于更改当前目录和设置环境变量。