我想从命令行使用默认应用程序打开一个文本文件。在此期间默认应用程序打开,终端必须被禁用(不能执行另一个命令)。例如,我使用 KDE,默认.txt
阅读器是 Kate,然后我想执行kate test.txt
并禁用终端,直到我终止 Kate。
我想要的是?
系统上的默认文本编辑器通常存储在$EDITOR
环境变量中。例如,在我的系统上,我有:
$ echo $EDITOR
/usr/bin/emacs
Run Code Online (Sandbox Code Playgroud)
所以,你可以简单地运行
$ $EDITOR test.txt
Run Code Online (Sandbox Code Playgroud)
注意:这不一定与图形环境设置中定义的编辑器相同。使用下面的方法来获得它。
或者,如果系统配置为使用它,您可以使用xdg-open
(open
在 OSX 上)启动与 MIME 类型关联的默认程序:
$ xdg-open test.txt
Run Code Online (Sandbox Code Playgroud)
但这不会在命令关闭之前保持终端。但是,您可以使用 mime 设置找出将打开的程序,然后自己调用该程序。为此,获取与文本 MIME 类型关联的程序:
$ xdg-mime query default text/plain
pluma.desktop;sublime_text.desktop
Run Code Online (Sandbox Code Playgroud)
因此,现在您可以解析该行以获取程序名称:
editor=$(xdg-mime query default text/plain | sed 's/\..*//')
$editor test.txt
Run Code Online (Sandbox Code Playgroud)
注意:这假定.desktop
文件具有实际可执行文件的名称。更安全的方法可能是找到桌面文件本身并从中获取可执行文件。然后,启动您找到的程序。您可以使用此命令完成整个操作:
editor=$(grep -i ^exec $(locate -n 1 $(xdg-mime query default text/plain |
cut -d';' -f 1)) |
perl -pe 's/.*=(\S+).*/$1/')
$editor test.txt
Run Code Online (Sandbox Code Playgroud)