Shell RHEL RPM spec安装后%post未寻源外壳脚本

Shell RHEL RPM spec安装后%post未寻源外壳脚本,shell,rhel,rpm-spec,Shell,Rhel,Rpm Spec,在RHEL7.4中成功安装rpm之后,我正在尝试在根环境中生成一个shell脚本(就像我作为根用户进行安装一样) rpm规范%post部分如下: %post source /etc/profile.d/env.sh 脚本env.sh在上述路径中安装后可用,用于设置PYTHONPATH环境变量,如下所示: pypath="/opt/lib" if [ "$(echo $PYTHONPATH | grep $pypath)" == "" ]; then export PYTHONP

在RHEL7.4中成功安装rpm之后,我正在尝试在根环境中生成一个shell脚本(就像我作为根用户进行安装一样)

rpm规范%post部分如下:

%post
source /etc/profile.d/env.sh
脚本env.sh在上述路径中安装后可用,用于设置PYTHONPATH环境变量,如下所示:

pypath="/opt/lib"
if [ "$(echo $PYTHONPATH | grep $pypath)" == "" ]; then
        export PYTHONPATH="$PYTHONPATH:$pypath"
fi
但是,在成功安装rpm之后,即使我将“source”命令更改为“”脚本,也不会发生这种情况


当我手动获取脚本env.sh时,变量被设置

可能命令正在正确运行,但您希望PYTHONPATH对每个人都进行更改;事实并非如此:PYTHONPATH仅在%post节的shell会话中更改

每次启动新的shell(或bash)会话时,都会重置环境变量。您可以查看相关问题,了解如何永久更改环境变量的信息;然后,您可以选择rpm软件包使用的策略,例如:


可能命令运行正确,但您希望PYTHONPATH对每个人都进行更改;事实并非如此:PYTHONPATH仅在%post节的shell会话中更改

每次启动新的shell(或bash)会话时,都会重置环境变量。您可以查看相关问题,了解如何永久更改环境变量的信息;然后,您可以选择rpm软件包使用的策略,例如:


什么都没发生吗?还是你有错误?您完整的
%post
部分是什么样子的?
/etc/profile.d/env.sh
看起来像什么?
%post
看起来和我在这里给出的一样。您如何确定
PYTHONPATH
设置不正确?如果
%post
看起来与您在此处发布的内容相同,那么您实际上并没有在
%post
脚本中使用Python,因此在该环境中设置
PYTHONPATH
将一事无成。难道什么都没有发生吗?还是你有错误?您完整的
%post
部分是什么样子的?
/etc/profile.d/env.sh
看起来像什么?
%post
看起来和我在这里给出的一样。您如何确定
PYTHONPATH
设置不正确?如果
%post
看起来与您在此处发布的内容相同,那么您实际上并没有在
%post
脚本中使用Python,因此在该环境中设置
PYTHONPATH
将无法完成任何任务。这就是问题所在。您的RPM应该在
/etc/profile.d
中删除一个文件,然后用户需要重新登录以获取该文件。不要让你的
%post
编辑
/etc/bash_profile
或类似的东西;如果您发现有建议告诉您这样做,这是古老而错误的。因此spec文件的每个
%部分都在其自己的shell会话中运行,但即使它们在当前会话中运行,也不会对您有所帮助,因为打开新会话仍会重置您的环境变量。这就是问题所在。您的RPM应该在
/etc/profile.d
中删除一个文件,然后用户需要重新登录以获取该文件。不要让你的
%post
编辑
/etc/bash_profile
或类似的东西;如果您发现有建议告诉您这样做,这是古老而错误的。因此spec文件的每个
%部分都在其自己的shell会话中运行,但即使它们在当前会话中运行,也不会对您有所帮助,因为打开新会话仍会重置您的环境变量。