Programing

모든 출력을 / dev / null로 리디렉션하는 방법은 무엇입니까?

crosscheck 2020. 12. 12. 10:06
반응형

모든 출력을 / dev / null로 리디렉션하는 방법은 무엇입니까?


백그라운드에서 프로그램 (google-chrome)을 실행하고 싶지만 터미널에 메시지가 출력되지 않도록합니다.

나는 이것을 시도했다.

google-chrome 2>&1 1>/dev/null &

그러나 터미널은 여전히 ​​다음과 같은 메시지없이 채워집니다.

[5746 : 5746 : 0802/100534 : ERROR : object_proxy.cc (532)] 메서드를 호출하지 못했습니다 : org.chromium.Mtpd.EnumerateStorag ...

내가 도대체 ​​뭘 잘못하고있는 겁니까? 모든 출력을 /dev/null어떻게 리디렉션 합니까?


리디렉션 연산자는 왼쪽에서 오른쪽으로 평가됩니다. 당신이 잘못한 것을 2>&1먼저 놓았 는데, 이것은 당신이 아직 리디렉션 하지 않았기 때문에 현재 가리키는 로컬 터미널 화면 2과 같은 위치 를 가리 킵니다 . 다음 중 하나를 수행해야합니다.11

2>/dev/null 1>/dev/null google-chrome &

또는

2>/dev/null 1>&2 google-chrome &

명령과 관련된 리디렉션 연산자의 위치는 중요하지 않습니다. 명령 앞이나 뒤에 둘 수 있습니다.


섹션 Redirectionbash의 참조 설명서에서 다음과 같이 말합니다.

연산자 [n]>&word는 [...] 출력 파일 설명자를 복제하는 데 사용됩니다.

모두를 리디렉션하려면 stderrstdoutfile양식을 사용해야합니다

&>file

대리를 의미하는 귀하의 경우와 관련하여

2>&1 1>/dev/null

&>/dev/null

구문이 다른 것 같습니다.

./a.out 1>/dev/null 2>&1 &

FD의 장치를 참조 = 2가 다른 때 ./a.out 1>/dev/null 2>&1./a.out 2>&1 1>/dev/null &

1) FD = 2는 / dev / null을 가리 킵니다.

>./a.out 1>/dev/null 2>&1 &
[1] 21181
>lsof -p `pidof a.out`
COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
a.out   21181 xxxxxxxxxxxxxxx    0u   CHR 136,43      0t0        46 /dev/pts/43
a.out   21181 xxxxxxxxxxxxxxx    1w   CHR    1,3      0t0      3685 /dev/null
a.out   21181 xxxxxxxxxxxxxxx    2w   CHR    1,3      0t0      3685 /dev/null

2) FD = 2는 / dev / pts / 43을 가리 킵니다.

>./a.out 2>&1 1>/dev/null &
[1] 25955
>lsof -p `pidof a.out`
COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
a.out   25955 xxxxxxxxxxxxxxx    0u   CHR 136,43      0t0        46 /dev/pts/43
a.out   25955 xxxxxxxxxxxxxxx    1w   CHR    1,3      0t0      3685 /dev/null
a.out   25955 xxxxxxxxxxxxxxx    2u   CHR 136,43      0t0        46 /dev/pts/43

참고 URL : https://stackoverflow.com/questions/18012930/how-to-redirect-all-output-to-dev-null

반응형