리디렉션된 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함수에는 하나의 매개변수가 필요합니다.

관련 정보