![桌面环境的$PATH环境变量和shell中的环境变量有区别吗?](https://linux22.com/image/136143/%E6%A1%8C%E9%9D%A2%E7%8E%AF%E5%A2%83%E7%9A%84%24PATH%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E5%92%8Cshell%E4%B8%AD%E7%9A%84%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E6%9C%89%E5%8C%BA%E5%88%AB%E5%90%97%EF%BC%9F.png)
我正在尝试查找.desktop
qtcreator 的文件,所以我这样写:
$ for p in ${XDG_DATA_DIRS//:/ }; do
grep -rni 'qtcreator' $p;
done
这是最相关的几行:
/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:2:X-AppInstall-Package=qtcreator-plugin-ubuntu
/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:6:Exec=qtcreator %F
/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:7:Icon=ubuntu-qtcreator
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:2:X-AppInstall-Package=qtcreator
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:6:Exec=qtcreator %F
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:7:Icon=QtProject-qtcreator
/usr/share/app-install/desktop/qhimdtransfer:qhimdtransfer.desktop:12:#Icon=qtcreator_logo_32
我认为这qtcreator:qtcreator.desktop
是 QtCreator 的桌面入口,所以我打开它并发现:
[Desktop Entry]
X-AppInstall-Package=qtcreator
X-AppInstall-Popcon=292
X-AppInstall-Section=universe
Exec=qtcreator %F
Icon=QtProject-qtcreator
Type=Application
Terminal=false
Name=Qt Creator
GenericName=Integrated Development Environment
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.nokia.qt.qmakeprofile;application/vnd.nokia.xml.qt.resource;
Categories=Qt;Development;IDE;
InitialPreference=9
X-Ubuntu-Gettext-Domain=app-install-data
qtcreator 不在 shell 的变量 $PATH 中。但我仍然可以在 gnome unity 中启动 QtCreator。
来自freedesktop-exec-变量我注意到
如果未提供完整路径,则会在桌面环境使用的 $PATH 环境变量中查找可执行文件。
问题
桌面环境的 $PATH 环境变量与 shell 不同吗?
如果是这样,包含桌面环境 $PATH 变量的配置文件在哪里?
我安装了较新版本的 QtCreator,然后在桌面中启动 QtCreator,并发现它引用了较新版本,而无需更改文件qtcreator:qtcreator.desktop
。我认为qt的路径有问题吗?
桌面环境:gnome
操作系统:ubuntu16.04
编辑
我遇到的实际问题与 $PATH 无关(请参阅我的回答)。 Gilles的回答实际上是对“桌面环境的$PATH环境变量与shell中的环境变量不同吗?”的回答。所以我接受了,以防有人和我有同样的疑问。
答案1
桌面环境的 $PATH 环境变量与 shell 不同吗?
可能是的。
程序的环境并非来自文件,除非程序特意从文件中读取环境变量。每个进程都会继承其父进程的环境。从文件中读取环境变量是登录时运行的程序(以文本模式登录时的 shell、会话管理器或在图形环境中登录时充当此类程序)的工作的一部分。因此,通常情况下,如果您使用桌面环境并在终端中打开 shell,则该 shell 将具有与桌面环境相同的环境。
然而,在实践中,情况可能并非如此,因为网上有大量建议告诉人们将环境变量定义放在.bashrc
.这是个坏主意因为这意味着这些环境变量不可用于直接从 GUI 启动的程序,而不是从终端启动的程序。但如果您这样做了,您可能会发现终端中的环境变量与桌面环境中以及不是从终端启动的程序中的环境变量不同。
将环境变量定义放入~/.profile
大多数系统上都可以。我认为只要你不激活 Wayland,它就适用于 Ubuntu 16.04 上的 Gnome(这会破坏很多东西,包括登录设置,并且并不总是提供恢复方法)。
无论如何,将环境变量放在错误位置的常见症状是环境变量存在于终端中,但在桌面环境中缺失。如果情况相反,您的 shell 启动文件中必须有一些不寻常的东西。
qtcreator 不在 shell 的变量 $PATH 中。
我非常怀疑它是否已安装。 Ubuntu 发行qtcreator
时/usr/bin
大多数程序都位于其中。
但请注意,这$PATH
与文件的位置无关.desktop
。$PATH
是针对应用程序的,而不是针对.desktop
文件的。如果您正在寻找 的.desktop
文件qtcreator
,并且已qtcreator
安装该软件包,则可以搜索文件:
$ locate qtcreator.desktop
/usr/share/applications/qtcreator.desktop
/usr/share/applications
是文件的标准位置.desktop
。
如果除了 Ubuntu 中的 QtCreator 之外,您还安装了自己的 QtCreator 版本,那么您应该确保它qtcreator
位于命令搜索路径中,即$PATH
.如果您在系统范围内安装了它,则应该将其作为 提供/usr/local/bin/qtcreator
,它位于之前的命令搜索路径中/usr/bin
,因此您将优先获得您的版本而不是系统版本。如果您将其安装在您的帐户上,请从qtcreator
可执行文件所在的位置创建一个符号链接~/bin/qtcreator
,即bin
您的主目录下的目录(如果该目录不存在,请创建它)。 Ubuntu 默认.profile
添加~/bin
到$PATH
.
答案2
事实证明这$XDG_DATA_DIRS
不是*.desktop
文件的唯一搜索路径。所以我发现了错误的QtCreator桌面入口文件。
请参阅XDG 基目录规范
有一个相对应写入用户特定数据文件的基本目录。该目录由环境变量 $XDG_DATA_HOME 定义。
$XDG_DATA_HOME 定义应存储用户特定数据文件的相对基目录。如果 $XDG_DATA_HOME 未设置或为空,则应使用等于 $HOME/.local/share 的默认值。
$XDG_DATA_DIRS 定义用于搜索数据文件的基本目录的优先顺序集除了 $XDG_DATA_HOME 基目录之外。 $XDG_DATA_DIRS 中的目录应使用冒号“:”分隔。
我找到了真正的QtCreator桌面入口文件~/.local/share/application/DigiaQt-qtcreator-community.desktop
。
是Exec行Exec=/home/user/Qt/Tools/QtCreator/bin/qtcreator
,所以问题不大$PATH
。
我从源代码安装了旧版和新版 QtCreator。InstallationLog.txt
Qt 目录下有一个。将桌面文件复制到的操作~/.local/share
记录在此处。