操作系统:Ubuntu 18.04 或 Kubuntu 18.04
如果我通过文件管理器通过右键单击并选择 gedit 打开文件然后运行pgrep -a
我得到
dkb@dkb-ubu1804:~$ pgrep -a gedit
2044 gedit /home/dkb/.bash_aliases
另一方面,如果我首先打开 gedit 并使用文件选择器对话框打开同一个文件,所有pgrep -a
显示我的是
dkb@dkb-ubu1804:~$ pgrep -a gedit
2081 gedit
dkb@dkb-ubu1804:~$
未显示文件名和路径。
这是为什么?
这是因为
pgrep -a
同时显示了程序的名称和它的命令行参数,当你右键单击/home/dkb/.bash_aliases
并使用 打开它时gedit
,它实际上是作为命令行参数运行gedit
的。/home/dkb/.bash_aliases
这就是说,就好像您已经运行了命令一样gedit /home/dkb/.bash_aliases
。将文件名作为命令行参数传递不仅仅适用于您通常在终端中运行的程序。这对于在桌面环境中打开文件的工作方式也很重要。当您运行程序打开文件时,无论是通过右键单击文件并选择程序,当文件是配置为使用该特定程序打开的 MIME 类型时双击文件,或拖动文件到程序的启动器上,这会导致程序以作为命令行参数传递给它的文件名运行。这与您在终端窗口中运行的方式相同,这也有效。
gedit filename
相反,在没有初始文件的情况下打开 gedit 并不会向其传递任何命令行参数。这与您运行的方式相同
gedit
。然后在程序中打开文件时,不会更改传递给它的命令行参数。当程序像
pgrep
check. 但这很少做,通常作为编辑密码等敏感信息的半途而废。(更好的方法是不在命令行参数中传递密码。)命令行参数不代表程序的状态。相反,他们指定程序是如何运行的,或者换句话说,它最初被告知要做什么。(它们不是程序在启动时收到的唯一信息——例如,程序还有环境变量、当前工作目录和 umask。)命令行和图形编辑器都接受文件名作为命令行参数。
为了更全面地了解情况,我应该说命令行参数传递给在桌面环境中运行的图形程序的具体方式因程序而异。
.desktop
它在用于运行程序的启动器(即文件)中指定。为了工作,一个
.desktop
文件必须指定一个 Exec 键1,它给出了命令以及 - 对于支持被启动以打开文件或其他资源的命令 - 参数的占位符。有多个占位符可用,但%U
很常见。它被零个、一个或多个 URL 或文件名替换。中的Exec
行gedit.desktop
是:1该链接指向 GNOME 文档,但这也适用于 KDE 和其他桌面环境。它是一个 freedesktop.org 规范。