Fib*_*sky 5 shell bash terminal background-process
我想从命令行打开带有 evince 的 PDF,在弹出 Evince 窗口后,我想返回终端命令并$等待下一个命令。
现在,如果我运行此命令,PDF 将在一个窗口中打开,当我返回终端时,我需要按 Enter 键才能等待$下一个命令。
$ evince foo.pdf &
Run Code Online (Sandbox Code Playgroud)
知道如何防止需要第二次按 Enter 才能键入下一个命令吗?
我不关心关闭命令行后打开的窗口是否会关闭(即nohup不需要)。
我使用的是 bash 版本 5.1.16。
ter*_*don 11
实际上不需要按回车键,可以直接使用终端。发生的情况是evince可以将各种消息打印到标准错误,因此这些消息会让您的终端看起来还没有准备好。但是,您可以忽略它们并输入命令,您就会看到它的工作原理。
无论如何,我意识到这不太实用,所以你可以做的是将标准错误重定向到/dev/null:
evince foo.pdf 2>/dev/null &
Run Code Online (Sandbox Code Playgroud)
为了避免每次都写这个,你可以写一个小函数。将这些行添加到您的~/.bashrc(或其他 shell 的等效项)中:
evince(){
command evince "$@" 2> /dev/null
}
Run Code Online (Sandbox Code Playgroud)
这用作command获取 real 的一种方式evince,忽略函数名称,并将您使用的任何参数直接传递给函数 ( "$@"),将 stderr 重定向到 dev/null。
保存文件,打开一个新终端,然后您就可以按照evince您想要的方式使用了。