目前我有一个deb安装程序,使用Cmake->Cpack,它运行一个postinst脚本,它在/etc/profile.d中调用另一个脚本,该脚本设置一些环境变量以允许我们的应用程序运行
问题是安装后,它要求用户重新启动/注销登录他们的系统以运行应用程序(无论是从终端还是应用程序页面(。
我希望这样就不需要在初次安装后重新启动/注销登录他们的当前会话,并且能够从当前实例启动他们的应用程序
postinst我的Cpack/Cmake项目中的脚本
#!/bin/bash
source /etc/profile.d/configset.sh
desktop-file-install /usr/share/applications/myApp.desktop
udevadm control --reload-rules && udevadm trigger
configset.sh脚本
#!/bin/sh
MYAPP_BIN_PATH="/opt/myApp/bin"
MYAPP_LIB_PATH="/opt/myApp/lib"
MYAPP_DIR="/opt/myApp"
export PATH="$PATH":${MYAPP_BIN_PATH}
export MYAPP_DIR
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":${MYAPP_LIB_PATH}
这里的问题是,安装应用程序后,几个包含需要满足的依赖项的共享库(因此需要重新启动/注销登录计算机以运行configset.sh脚本来链接deps(
有没有一种方法可以让configset.sh脚本在deb安装后不重新启动的情况下在整个系统中运行?
我知道从当前bash终端实例运行source /etc/profile.d/configset.sh
,然后从那里启动应用程序是一种方法,但对于只想安装.deb并立即从Ubuntu的应用程序页面启动它的用户来说,这不是一个可行的解决方案。
因此,我不仅希望在deb后安装时立即设置我的环境变量,系统范围,而且在重新启动后保持它。
我希望将我的解决方案包含在以下工具集中:CMake、CPack、shell和bash脚本。没有蟒蛇。
删除对/etc/profile的修改。d.创建一个脚本:
#!/bin/sh
MYAPP_BIN_PATH="/opt/myApp/bin"
MYAPP_LIB_PATH="/opt/myApp/lib"
MYAPP_DIR="/opt/myApp"
export PATH="$PATH":${MYAPP_BIN_PATH}
export MYAPP_DIR
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":${MYAPP_LIB_PATH}
"$MYAPP_BIN_PATH"/your_app "$@"
并将该脚本作为可执行文件安装到/usr/bin/your_app
。现在,您不必在任何地方设置任何内容——您的应用程序将获得所需的所有变量。你可能想阅读https://stackoverflow.com/a/28085062/9072753。你可能想像其他类似的应用程序一样进行研究,比如steam。
有没有一种方法可以让configset.sh脚本在deb安装后不重新启动的情况下在整个系统中运行?
我希望我的环境变量立即设置,全系统
这是不可能的-Linux操作系统(以及任何好的操作系统(在设计时都考虑到了进程隔离。进程是孤立的,根据设计,不可能影响正在运行的进程。