我擔心這可能是重複的,但我找不到匹配的問題。
我主要在命令行上工作。如果我想簡單地打開一個 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
[strg]+[c]
給出以下輸出並終止 evinceexec_in_background_silent evince my_file.pdf
[1] 12234
^C
[1]+ Fertig < /dev/null &> /dev/null
在 bash 的聯機幫助頁中,它說:
當 bash 異步啟動作業(在後台)時,它會打印如下一行:
[1] 25647
表明此作業是作業編號 1,並且與此作業關聯的管道中最後一個進程的進程 ID 為 25647。單個管道中的所有進程都是同一作業的成員。Bash 使用作業抽像作為作業控制的基礎。
@Dimitre Radoulov 在另一篇SO 帖子中說:
您可以通過將調用放在子外殼中來抑制該輸出:
(echo "你好,我是後台任務" &)
因此,為了避免作業號和進程 ID 輸出行,您應該像這樣更改您的函數:
function exec_in_background_silent() {
("$@" </dev/null &>/dev/null &)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句