使用默认程序打开文件并等待应用程序终止

Bla*_*ake 2 kate file-opening

我想从命令行使用默认应用程序打开一个文本文件。在此期间默认应用程序打开,终端必须被禁用(不能执行另一个命令)。例如,我使用 KDE,默认.txt阅读器是 Kate,然后我想执行kate test.txt并禁用终端,直到我终止 Kate。

我想要的是?

  • 执行启动默认文本编辑器的命令
  • 同时,C++ 程序正在等待执行上述命令的特定点
  • 当用户准备好后,保存文档,退出默认文本编辑器(终止)并继续执行 c++ 程序

ter*_*don 6

系统上的默认文本编辑器通常存储在$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)