2016-05-04 11 views
2

シェフのレシピを使用してデフォルトの環境変数を変更する際に問題が発生しました。私の要求は、現在の作業シェル(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 

、IIRCディストリビューション固有のオプションがあります(this threadを参照してください) 。

+0

これは正解ですが、 '/ etc/environment'とその友人はグローバルから_far_です。それらは一般にログインシェルにのみ適用されます。これは '$ TERM'でも問題ありませんが、実際にはグローバルではないことを常に覚えておいてください。彼らは、サービス(通常)やシェルを使わずにSSHで実行されるコマンドなどのものには適用されません。 – coderanger

+0

その情報をありがとう。本当に_global_環境変数を定義する方法はありますか? '/ etc/default/'のようなものが良い場所ではない場合、必要性はまだありません。確信が持てません。好奇心のためだけです。 – StephenKing

+0

いいえ、残念ながら、これはWindowsが正しく行った数少ない場所の1つで、Unixは間違っていました。 env変数が設定される唯一の方法は 'setenv()'(シェルのinitファイルが低レベルで行うことです)を呼び出すか、親プロセスから継承することです。あなたが自分のinitを書くのでなければ、本当にグローバルenv変数を設定する場所はありません:) – coderanger

0

おかげで、現在のシェルからログアウトした後..

その作業と、再度ログイン..しかし、私は、これは現在のシェル上で効果的でほしいと現在の作業シェルからログアウトする必要はありません。