从 shell 后台使用程序打开文件

从 shell 后台使用程序打开文件

从后台 bash shell 启动程序(例如 evince)的命令是

evince &

但是如果我想在后台打开一些带有证据的文件怎么办?两者都evince myfile.pdf &没有evince & myfile.pdf按预期工作:第一个输出类似于[2] 5356 但在下一行中 shell 返回锁定;第二个打开了一个空洞的证据空间。

那么,我可以使用什么语法?

答案1

有时,当您启动程序时,它会打印出一些消息。如果您在后台启动它,程序可能会锁定,直到您将其返回前台以便它可以显示其消息。解决方案是重定向stdout和stderr,以便程序可以继续在后台运行。一种方法是:

evince myfile.pdf >~/evince.errs 2>&1 &

上面的代码在您的主目录中创建了一个文件,其中包含evince想要显示的任何消息。

如果您确信 evince 的消息不重要,您可以丢弃它们而不创建文件:

evince myfile.pdf >/dev/null 2>&1 &

运行上述任一命令后,shell 应该生成类似的消息[1] 1234,然后出现 shell 提示符。正如 Graeme 所建议的,如果 shell 提示符没有出现,请尝试再次按 Enter 键。

答案2

evince myfile.pdf

CTRL+Z

bg

这将打开程序,暂停它,然后将其置于后台。

或者:

( evince myfile.pdf ) &

evince(subshell)和 背景中打开(subshell)。有点奇怪的是:

evince myfile.pdf &

但不起作用,因为它对我有用。

你可能想要:

echo $-

并检查您的作业控制参数。我建议:

set -b

如果您还没有使用它。做:

man set

了解更多信息。或者看我的另一个回答这里

相关内容