是否可以从厨师食谱中重新加载$ PATH?
我对以下主题中给出的关于过程信号的响应进行了抨击:
How to have Chef reload global PATH
我不太了解omribahumi用户给出的例子。 我想要一个更清楚的例子与厨师 - 客户/食谱来理解, 他解释说,似乎有可能采用这种解决方法。
感谢。
答案 0 :(得分:0)
我发现这个请求有两个原因:
在路径中添加一些内容以立即执行=>很容易,只需更新厨师运行中的ENV ['PATH']变量。
扩展PATH系统范围以包含刚刚安装的内容。
对于2,您可以更新/ etc / environment文件(对于ubuntu)或将文件添加到/etc/profiled.d(更好的想法是保持对它的控制), 但很明显,新的PATH变量将无法用于实际运行的进程(包括您的实际shell),它将适用于文件更新后启动的进程。
为了解释一下您所做的更多的链接:
使用导出命令创建一个文件以设置env变量
echo 'export MYVAR="my value"' > ~/my_environment
创建一个bash函数从文件中加载env变种
function reload_environment { source ~/my_environment; }
在bash中设置陷阱以对信号执行某些操作,此处在bash接收SIGHUP时运行该函数
trap reload_environment SIGHUP
启动env文件首次采购的功能,有两种方式:
简单的一个:启动功能
reload_environment
复杂的一个:获取实际shell的pid并发送一个SIGHUP信号
kill -HUP `echo $$`
所有这些仅适用于当前的shell,直到您在.bash_rc
中设置它为止确实不是你要求的,但我希望你能理解,没有办法更新已经运行的过程的上下文。
你能做的最好的事情是:用你想要的任何方法更新PATH(例如/etc/profile.d中的例子)并执行一个墙(如果厨师以root身份运行)告诉用户重新加载他们的envs
echo 'reload your shell env by executing: source /etc/profile' | wall
再一次,它可以为人类工作,而不是已经运行的其他进程,那些将不得不重新启动。