我正在尝试将 csh 脚本转换为 tcl 脚本,以便在 linux模块功能中使用。csh 脚本最初用于为软件包正确设置环境变量。我不想让最终用户在每次他/她希望使用该软件时更改他的 shell 并运行 3 个命令,而是想创建一个简单的单行命令,该命令独立于 shell 并适当地设置他们的环境。因此,使用 modulefile 似乎是完成此任务的完美方式。
当我尝试对 coredumpsize 设置限制时,我的问题出现了,因为似乎没有任何方法可以从模块内设置此值。原始的 csh 命令如下所示,limit coredumpsize 0
. 我知道与此等效的原始 bash 命令行是ulimit -c 0
. 注意:这两个命令都假定我想在使用这个软件时禁用 coredumpfiles。
我的模块文件代码尝试以依赖于 shell 的方式调用此命令,b/c 似乎没有模块文件本机的“限制”命令。
set shell [module-info shell]
if { $shell=="bash"} {
set XARCH amd64
[exec /bin/bash -c "ulimit -c 0"]
} elseif {$shell=="tcsh"} {
set XARCH linux
[exec /bin/tcsh -c "limit coredumpsize 0"]
根据我在网络范围内的研究,我找不到可以修改的环境变量,尽管 RLIMIT_CORE 看起来可能接近我正在寻找的。我当前代码的问题是 exec 命令产生一个 $shell 进程并运行一个命令,而不是在调用 tcl 模块进程的 shell 上运行 limit 命令。
如果能够以一种简单的方式(最好是使用模块)更改环境变量并设置 coredumpsize 的限制,任何帮助将不胜感激。