从终端打开文件

当我们想要从终端打开一个应用程序或文件时,我们会输入,比如说,
okular file.dvi

这将打开应用程序,同时显示应用程序的状态。我们不能关闭终端,因为这会终止进程。不幸的是,如果你想要创建一个LaTeX文件,你需要一个标签来用于文本编辑器,一个用于dvi文件等等。如果你想要从终端打开所有窗口,那就别指望了。我尽量多使用终端,虽然我有Yakuake,但是有这么多标签以及看哪些应用程序被我终止了之类的事情还是有点烦人。
所以,有没有一种方法可以从终端打开应用程序/文件,使其状态不显示,并立即给出提示符以便我们可以用它打开更多的应用程序?

根据您的要求,关于没有看到任何输出,查看器不是终端的子进程等等,似乎使用键盘快捷方式打开查看器,或者使用例如grun来传递文件名也更适合,而不是坚持使用终端。 - jmetz
我不介意看不到任何输出...我在于必须为多个应用程序打开多个终端/标签页。我选择的答案完全符合我的所有偏好。 - notablytipsy
4个回答

xdg-open file.dvi

xdg-open会使用默认应用程序打开任何文件。作为额外的好处,您可以关闭终端而不终止应用程序。

由于xdg-open是一个很长的名字,我在.bashrc中为它设置了一个别名:

alias open='xdg-open'

太棒了!这个是最好的,甚至比我之前选择的还要好!而且你还获得了一个“复兴”徽章 :) - notablytipsy
简直太棒了! - Yugal Jindle
只想指出,由于实际上并没有运行该程序,这意味着您可以在不创建该程序的新实例的情况下打开文件。这意味着您可以打开一个文件,并且它将自动在已经打开的应用程序实例中打开。 - Arc676
2如果你最近从Mac切换到Linux,那么将alias open="xdg-open"添加到你的配置文件中可能是个不错的主意。 - Pedro Luz
在出现zsh: command not found: xdg-open的情况下,快速提示:运行sudo apt-get install --reinstall xdg-utils - Salomanuel

okular file.dvi &

只需在命令后面添加一个&,就可以将其作为独立进程运行。

哇!太完美了!好笑...我在谷歌上搜索“在终端中打开而不显示状态”,从来没想到它会像一个独立的进程一样运行!不过,很遗憾,它说我需要等待8分钟,所以... - notablytipsy

okular file.dvi &> /dev/null &会更好一些。这样,程序就不会在终端上写入信息。

如果你只使用okular file.dvi &,程序仍然会在终端上报告信息,而且经常会在你工作中间出现。


使用evince file.pdf &这样的命令,在关闭终端时,进程也会被关闭,因此它仍然是终端的子进程,没有独立性;而nohup evince file.pdf &则允许您关闭终端而不会导致程序关闭,因为nohup表示忽略任何要求进程关闭(挂断)的信号。您还可以以类似的方式放弃对进程的控制,请参阅此讨论here

谢谢,我不知道这个。我使用Yakuake,从来不关闭它,所以这不是个问题。但了解这样的事情总是很有用的。 - notablytipsy
我刚刚编辑了我的帖子-看看有什么不同-现在应该可以正常工作了。 - user76204
抱歉 - 我忘记在结尾处放置 & 符号了 :) - notablytipsy
1当我尝试使用evince file.pdf &命令时,在我退出终端后,它并没有终止该进程... - notablytipsy
当我在我的机器上退出终端时,它也会退出Evince,例如使用命令"evince mplayer.pdf &"。 - user76204
嗯,不知道为什么对我不起作用?但是根据维基百科上的文章,我看出你是对的。 - notablytipsy
我不知道,这很奇怪。在查看系统监视器后,这两个进程明确消失了。 - user76204
我甚至检查了系统监视器,看看它是否在我退出后仍在后台运行... 什么都没有。 - notablytipsy
1当您启动一个子进程时,它属于父进程。在这种情况下,evince 是终端的子进程。因此,当您关闭终端时,它也会关闭子进程。nohup 分离了这种关系,所以如果您想要关闭终端,可以使用它。然而,默认情况下,nohup 在您的主文件夹中创建一个名为 nohup.out 的文件。如果您不想要该文件,请使用以下重定向命令:nohup evince file.pdf &>/dev/null & - Paddy Landau