重定向的 STDOUT/STDERR 被拒绝的命令仍然将输出发送到 shell

重定向的 STDOUT/STDERR 被拒绝的命令仍然将输出发送到 shell

我在 my 中定义了一个函数.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 &

答案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函数需要一个参数。

相关内容