2013-09-10 44 views
0

我想將csh腳本轉換爲在linux modules功能中使用的tcl腳本。 csh腳本最初用於爲軟件包正確設置環境變量。我不想讓終端用戶改變他的shell並在每次他/她希望使用該軟件時運行3條命令,而是希望創建一個簡單的獨立於shell的簡單命令,並適當地設置它們的環境。因此,使用模塊文件似乎是完成此任務的完美方式。使用模塊設置coredumpsize的限制

當我嘗試對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的限制,最理想的是使用模塊。

+0

我會將該csh腳本轉換爲Posix'sh'(或bash'),或者甚至考慮使用[GNU guile](http://www.gnu.org/software/guile/),它是比Tcl更強大(和恕我直言,更性感)。 –

+0

如何轉換腳本幫助?你是否建議我爲bash用戶製作免費腳本並讓他們運行它?這對我們的實例並不完全有幫助,因爲我也試圖減輕用戶在每次運行軟件時不得不輸入3-4個額外的命令。我也試圖避免讓最終用戶總是編輯他們的一般環境(他/她們可以將環境變量更改添加到他們的.bashrc文件中) – twinoza

回答

1

您不能通過運行shell來設置限制,因爲該限制只會影響您創建的shell進程(而不是對tcl進程本身)。

您需要了解如何直接調用setrlimit(2)系統調用。也許tclx可能會有所幫助。

花幾個小時閱讀Advanced Linux Programming

你誤解了Unix的一些基本概念,特別是過程。

+0

我知道我無法通過運行exec來設置限制命令來產生一個新的進程。我把它放在我的代碼示例中,以便審閱者能夠理解我最初開始的位置。 就這樣說,我正在研究是否有一些環境變量來控制我可以設置的coredumpsize,或者如果有另一種方法來更改coredumpsize。 我不確定tclx將工作B/C我不明白如何使用它與modulecmd。你能提供關於這方面的見解嗎? 或者,您是否知道如何從modulecmd中創建系統調用? – twinoza

+0

在'Modules'中啓用'TclX';否則在C中爲'setr​​limit'寫一個簡單的包裝器(或複製)。 Tcl從一開始就具有調用C代碼的能力。 –