2016-05-04 71 views
2

我面臨的問題,而要使用廚師食譜來更改默認的環境變量。我的要求是將當前的工作shell(從bash更改爲csh),並將TERM變量從xterm更改爲vt100。我嘗試了一些組合,但它不工作。如何使用廚師食譜來更改默認的環境變量

execute 'change present working shell' do 
    command '/bin/csh' 
end 

execute 'change term env' do 
    command 'setenv TERM vt100' 
end 

也嘗試使用腳本從廚師運行,但它也不工作。

回答

0

假設您正在運行Linux系統,您可以在全局範圍內定義環境變量/etc/environment

最簡單的方法來寫出該file將是以下:

file "/etc/environment" do 
    content "TERM=vt100" 
    mode "0644" 
end 

用戶的殼在/etc/passwd被指定在每個用戶級。對於給定的(現有)用戶johndoe,您可以使用user資源:

user "johndoe" do 
    shell "/bin/csh" 
    action :manage 
end 

爲了改變默認的shell用戶被後來創建的,IIRC有具體的發行版的選項(見this thread) 。

+0

雖然這是正確的答案,但值得注意的是'/ etc/environment'及其朋友是來自全局的_far_。它們通常只適用於登錄shell,這對'$ TERM'來說很好,但總是記得它實際上不是全局的。它們不適用於諸如服務之類的東西(通常),也不適用於通過SSH運行而不使用shell的命令。 – coderanger

+0

感謝您的信息。任何方式來定義一個真正的_global_環境變量?沒有這個需要,但是不確定,如果'/ etc/default/'這樣的東西不是一個更好的地方..只是爲了好奇。 – StephenKing

+0

不,不幸的是,這是Windows爲數不多的地方之一,Unix做錯了。 env vars設置的唯一方法是調用'setenv()'(這是那些shell初始化文件在低級別執行的操作),或者從父進程繼承。沒有一個地方可以設置真正的全球環境變量,除非你寫自己的init,我猜想:) – coderanger

0

謝謝..

其從當前shell註銷後的工作並重新登錄..但我想這是對當前shell有效,不希望從當前工作外殼註銷。