![从 shell 后台使用程序打开文件](https://linux22.com/image/52894/%E4%BB%8E%20shell%20%E5%90%8E%E5%8F%B0%E4%BD%BF%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6.png)
从后台 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
了解更多信息。或者看我的另一个回答这里。