在读取 Lua 模块文件时尝试获取 PATH 变量的值。
2021-5-19 20:5:0
收藏:0
阅读:151
评论:1
我正在尝试在 lua 脚本中读取模块文件中给定的 PATH 变量的值。我不确定是否可以使用 lua 中的某些函数来完成这项任务,因为我对 lua 还比较陌生。
模块文件(netcdf),下面只给出了部分模块文件 -
set application netcdf
set version 4.1.1
set machine kgb
set app_base /sw/$machine/$application/$version
module-whatis "Sets up environment to use serial netcdf"
if [ module-info mode whatis ] {
break
}
#vvvvv If if not a library, remove this part vvvvv
if [ is-loaded intel ] {
set app_build "centos6.2_intel12"
} elseif [ is-loaded gcc ] {
set app_build "centos6.2_gnu4.4.6"
break
} elseif [ is-loaded pgi ] {
set app_build "centos6.2_pgi12.3"
break
} else {
puts stderr "You must have a programming environment loaded to use this module"
break
}
#^^^^^ If if not a library, remove this part ^^^^^
# This assumes something like --prefix=$SW_BLDDIR
set app_path $app_base/$app_build
setenv NETCDF_DIR "$app_path"
setenv NETCDF_INCLUDE "$app_path/include"
setenv NETCDF_LIB "$app_path/lib"
#setenv NETCDF_LINK "-I${FOO_INCLUDE} -L${FOO_LIB} -lfoo"
prepend-path PATH "$app_path/bin"
prepend-path LD_LIBRARY_PATH "$app_path/lib"
我正在读取此文件,是否有任何方法可以获取所有三个可能的 PATH 组合值,而不考虑用户/系统的环境,即:
- PATH = /sw/kgb/netcdf/4.1.1/centos6.2_intel12/bin
- PATH = /sw/kgb/netcdf/4.1.1/centos6.2_gnu4.4.6/bin
- PATH = /sw/kgb/netcdf/4.1.1/centos6.2_pgi12.3/bin
我编写的代码只读取了文件的每一行,但是很难将值排列到变量中并获取所需的 PATH。
Lua 代码 -
-- reading module file
local mfile = v.file
local lines = lines_from(mfile)
-- print all line numbers and their contents
for k ,v in pairs(lines)do
print('line['..k..']',v)
end
-- see if file exists
function file_exists(file)
local f = io.open(file,"rb")
if f then f:close() end
return f~= nil
end
-- get all lines from a file, returns an empty
-- list/table if the file does not exists
function lines_from(file)
if not file_exists(file) then return {} end
local lines = {}
for line in io.lines(file) do
if (string.match(line, 'set') or string.match(line,'prepend'))then
lines[#lines+1] = line
end
end
return lines
end
我获得的输出只显示了我需要的感兴趣的行,但是获得所有可能的 PATH 值仍然离我很远,谢谢您的帮助!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
Really depends how much you know about the non-Lua file:
对于 #1 情况,你可以很容易地使用 Lua 的模式匹配功能找到所有关于
app_build的设置,并从中确定 PATH 的 3 个值(无需解析其他变量,因为结构不会改变,可以在 Lua 代码逻辑中加以考虑)。对于 #2 情况,你有两个选项:
io.popen运行临时脚本使用 bash 并捕获其输出。然后,你可以使用 Lua 的模式匹配功能来查找 PATH 的值。你的 Lua 脚本将对此进行io.popen3 次,每次处理 3 个选项中的一个。根据脚本中的注释,脚本只能在编程环境内运行,因此这种方法可能不太可行。所以实际上,对于 #2 情况,你很可能会失败,对于 #1 情况,你走在正确的道路上。如果后者是你的情况,但你在获取所有变量时遇到问题,请在评论中进行提问,我将在我的答案中加入一个示例。