【发布时间】:2021-12-10 19:42:25
【问题描述】:
我担心这可能是重复的,但我找不到匹配的问题。
我主要在命令行上工作。如果我想简单地打开一个 pdf 文件,我想保持我的实际命令行工作并且不会被任何输出淹没。
一般
evince my_file.pdf </dev/null &>/dev/null &
确实可以...但是打字不是很方便。所以我尝试添加一个功能:
function exec_in_background_silent() {
"$@" </dev/null &>/dev/null &
}
这种方法的目的是分离运行传递的命令......但这样调用它:
exec_in_background_silent evince my_file.pdf
让我再次松开命令行,因为我认为现在它等待函数本身完成:(
如果我添加另一个&符号,它会非常好:
exec_in_background_silent evince my_file.pdf &
但是:有没有办法摆脱它?
(evince 可能是一个不好的例子,因为它不是很健谈……但还有其他的 ;))
编辑了解更多详情:
我正在运行 Ubuntu
echo "${BASH_VERSION}"
5.0.17(1)-release
- 调用后命令行被锁定
- 按 Enter 获得新的空行
- 按
[strg]+[c]会给出以下输出并终止 evince
exec_in_background_silent evince my_file.pdf
[1] 12234
^C
[1]+ Fertig < /dev/null &> /dev/null
【问题讨论】:
-
奇怪!您的功能在我的 bash 中完美运行。我们可以比较一下吗?
-
该函数不等待后台命令,它立即完成。所以主shell在等待时不应该延迟。
-
也许正在执行“screen -d -m evince my_file.pdf”?
-
在上面添加了一些细节。 @masterguru:给定的屏幕命令示例的行为方式完全相同:如果直接调用它可以正常工作,但会在函数内部中断。
-
@roccobaroccoSC 你是对的。在另一台计算机上它工作正常!
标签: bash function redirect detach