web-dev-qa-db-ja.com

リダイレクトされたSTDOUT / STDERRがまだシェルに出力を送信している所有されていないコマンド

.bashrcで、開くことができる関数を定義しました。 copen myfile.pdfを実行してbashからpdfファイル:

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

このコマンドを実行することにより、私は例えばを実行します。バックグラウンドでOkularを使用し、STDOUTとSTDERRを/dev/nullにリダイレクトして、bashから所有権を剥奪します。ただし、copen myfile.pdfを実行した後も、出力がbashに出力され(QSqlQuery::exec: database not openを複数回)、その理由がわかりません。そのような出力を抑制するにはどうすればよいですか?

コードをに変更しても問題が解決しないことに注意してくださいNohup xdg-open "$1" > /dev/null 2>&1 &

2
cbaumhardt

このアプローチを試してください:

#!/usr/bin/bash

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

次のようにスクリプトを実行します。./myscript SomePDFfile.pdf

&>/dev/nullは、bash> 4で追加された>/dev/null 2>&1の省略形です。

copen関数にはパラメーターが必要です。

1