Я пытаюсь преобразовать сценарий csh в сценарий tcl для использования в модулях Linux функциональность. Сценарий csh изначально использовался для правильной установки переменных среды для программного пакета. Вместо того, чтобы просить конечного пользователя изменить свою оболочку и запускать 3 команды каждый раз, когда он/она хочет использовать программное обеспечение, я хотел создать простую однострочную команду, независимую от оболочки и соответствующим образом настраивающую их среду. Таким образом, использование файла модуля кажется идеальным способом добиться этого.
Моя проблема возникает, когда я пытаюсь установить ограничение на размер дампа ядра, поскольку, похоже, нет никакого способа установить это значение из модулей. Исходная команда csh выглядит так: limit coredumpsize 0
. Я понимаю, что исходный эквивалент командной строки bash: ulimit -c 0
. Примечание. Обе эти команды предполагают, что я хочу отключить coredumpfiles при использовании этого программного обеспечения.
Мой код файла модуля пытается вызвать эту команду в зависимости от оболочки, потому что, похоже, не существует команды «limit», встроенной в файлы модулей.
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 и запускает одну команду, в отличие от запуска команды limit в оболочке, которая вызывает процесс модуля tcl.
Любая помощь будет очень признательна за возможность изменить переменные среды и установить предел размера дампа памяти одним простым способом, в идеале с использованием модулей.
sh
(или вbash
), либо даже подумал об использовании GNU guile, который намного мощнее (и, ИМХО, гораздо привлекательнее), чем Tcl. - person Basile Starynkevitch   schedule 10.09.2013