Bash

帶有重定向 STDOUT/STDERR 的廢棄命令仍將輸出發送到 shell

  • October 21, 2016

我在其中定義了一個函式.bashrc,允許我通過執行從 bash 打開例如 pdf 文件copen myfile.pdf

function copen {
   if [[ $# -eq 1 ]] ; then
       xdg-open "$1" > /dev/null 2>&1 & disown
       return 1
   fi
}

通過執行此命令,我在後台執行例如 Okular,將 STDOUT 和 STDERR 重定向到/dev/nullbash 並將其從 bash 中刪除。但是,執行後copen myfile.pdf我仍然將輸出列印到 bash (QSqlQuery::exec: database not open多次),我不明白為什麼。如何抑制這種輸出?

請注意,將程式碼更改為 nohup xdg-open "$1" > /dev/null 2>&1 &.

試試這個方法:

#!/usr/bin/bash

copen() {
   (($# == 1)) && xdg-open "$1" &>/dev/null & disown
}
copen "$1"

執行腳本如下: ./myscript SomePDFfile.pdf

這是在 bash >4&>/dev/null中添加的簡寫。>/dev/null 2>&1

copen函式需要一個參數。

引用自:https://unix.stackexchange.com/questions/317904