リダイレクトされたSTDOUT / STDERR拒否コマンドは依然としてシェルに出力を送信します。

リダイレクトされたSTDOUT / STDERR拒否コマンドは依然としてシェルに出力を送信します。

.bashrcたとえば、次のコマンドを実行してbashでpdfファイルを開くことができる関数がmyで定義されています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関数には1つのパラメータが必要です。

おすすめ記事