Path 从chef recipes客户端重新加载环境变量路径

Path 从chef recipes客户端重新加载环境变量路径,path,environment-variables,chef-infra,chef-recipe,Path,Environment Variables,Chef Infra,Chef Recipe,是否可以从厨师食谱中重新加载$PATH 在以下线程中给出的关于过程信号的响应中输入: 我不太理解omribahumi用户给出的例子。 我希望有一个更清楚的例子来说明主厨客户/菜谱, 他解释说,有了这一点,这一解决办法似乎是可能的 谢谢。我认为这个请求有两个原因: 在path中添加一些东西以便立即执行=>easy,只需在chef运行中更新ENV['path']变量即可 在系统范围内扩展路径,以包括刚刚安装的内容 对于2,你可以为ubuntu更新/etc/environment文件,或者在/etc/

是否可以从厨师食谱中重新加载$PATH

在以下线程中给出的关于过程信号的响应中输入:

我不太理解omribahumi用户给出的例子。 我希望有一个更清楚的例子来说明主厨客户/菜谱, 他解释说,有了这一点,这一解决办法似乎是可能的


谢谢。

我认为这个请求有两个原因:

在path中添加一些东西以便立即执行=>easy,只需在chef运行中更新ENV['path']变量即可

在系统范围内扩展路径,以包括刚刚安装的内容

对于2,你可以为ubuntu更新/etc/environment文件,或者在/etc/profiled.d中添加一个文件,最好控制它, 但很明显,新的PATH变量对于实际运行的进程(包括您的实际shell)不可用,它将适用于文件更新后启动的进程

要进一步解释您给出的链接,请执行以下操作:

使用导出命令创建文件以设置环境变量

echo 'export MYVAR="my value"' > ~/my_environment
创建从文件加载环境变量的bash函数

function reload_environment { source ~/my_environment; }
在bash中设置一个陷阱,以便在信号上执行某些操作,在这里,当bash接收到SIGHUP时运行该函数

trap reload_environment SIGHUP
启动env文件的首次寻源功能,有两种方式:

简单一点:启动该功能

reload_environment
复杂的一个:获取实际外壳的pid并向其发送一个SIGHUP信号

kill -HUP `echo $$`
所有这些都只适用于当前shell,直到您在.bash\u rc中设置它为止

事实上,这并不完全符合您的要求,但我希望您理解,无法更新已经运行的流程的上下文

您所能做的最好的事情是:使用您希望在/etc/profile.d中使用的任何方法更新路径,例如,如果chef以root用户身份运行,则执行一个wall命令,告诉用户重新加载他们的环境

echo 'reload your shell env by executing: source /etc/profile' | wall

同样,它可能对人类有效,而不是对其他已经运行的进程有效,这些进程必须重新启动。

您的用例是什么?也许有更简单的方法来解决你的问题。