Chef infra 如何使用chef recipe更改默认环境变量

Chef infra 如何使用chef recipe更改默认环境变量,chef-infra,Chef Infra,当我想使用chef recipe更改默认环境变量时,我遇到了这个问题。我的要求是将当前的工作外壳(从bash更改为csh),并将术语变量从xterm更改为vt100。我试过一些组合,但不起作用 执行“更改当前工作外壳”do 命令'/bin/csh' 结束 执行“更改术语环境”do 命令“setenv TERM vt100” 结束 还尝试使用脚本从chef运行,但也不起作用。假设您正在运行Linux系统,您可以在/etc/environment中全局定义环境变量 最简单的书写方法如下: 文件“/

当我想使用chef recipe更改默认环境变量时,我遇到了这个问题。我的要求是将当前的工作外壳(从
bash
更改为
csh
),并将
术语
变量从
xterm
更改为
vt100
。我试过一些组合,但不起作用

执行“更改当前工作外壳”do
命令'/bin/csh'
结束
执行“更改术语环境”do
命令“setenv TERM vt100”
结束

还尝试使用脚本从chef运行,但也不起作用。

假设您正在运行Linux系统,您可以在
/etc/environment
中全局定义环境变量

最简单的书写方法如下:

文件“/etc/environment”do
内容“术语=vt100”
模式“0644”
结束
用户的外壳在每个用户级别的
/etc/passwd
中指定。对于给定(现有)用户
johndoe
,您可以使用以下资源:

user“johndoe”do
shell“/bin/csh”
行动:管理
结束
为了更改以后创建的用户的默认shell,IIRC提供了特定于发行版的选项(请参阅)。

谢谢


在从当前shell注销并再次登录后,它将正常工作。。但我希望它在当前shell上有效,并且不希望从当前正在工作的shell注销

虽然这是正确的答案,但值得注意的是,
/etc/environment
及其朋友远离全球。它们通常只适用于登录shell,这对于
$TERM
来说很好,但请记住它实际上不是全局的。它们不适用于服务(通常)或命令等不使用shell通过SSH运行的情况。有没有办法定义一个真正的全局环境变量?还没有必要,也不确定像
/etc/default/
这样的东西是否不是更好的地方。。只是出于好奇。不,不幸的是,这是少数几个Windows做得对而Unix做得不对的地方之一。env变量获取集合的唯一方法是调用
setenv()
(这些shell init文件在低级别上就是这样做的)或从父进程继承。没有一个地方可以设置真正的全局环境变量,除非您编写自己的init,我想:)