백그라운드 작업을 종료할 때 I/O 리디렉션이 작동하지 않는 이유는 무엇입니까?

백그라운드 작업을 종료할 때 I/O 리디렉션이 작동하지 않는 이유는 무엇입니까?
[~]$ kill %123

bash: kill: %123: no such job

[~]$ kill %123 2>&1 > /dev/null

bash: kill: %123: no such job

백그라운드 작업을 종료하는 동안 모든 출력을 비활성화하고 싶습니다.

첫 번째 출력이 예상됩니다. 그러나 두 번째 출력은 그렇지 않습니다.

명령줄에 표시된 대로 리디렉션을 추가 하고 2>&1모든 출력 을 null 장치로 리디렉션하는 데 사용합니다. 그러나 출력은 여전히 ​​터미널에 표시됩니다.stderrstdout> /dev/null

설명이 있나요?

미리 감사드립니다.

업데이트 된 정보:

다음 명령은 예상대로 작동합니다.

kill %123 > /dev/null 2>&1

답변1

출력 리디렉션은 프로세스의 속성입니다. 따라서 2>&1로 리디렉션할 때 다음이 설정됩니다.현재의stdout을 현재 TTY인 stderr로 출력한 다음 >은 stdout을 /dev/null로 설정하여 stderr을 TTY로 설정합니다. 업데이트된 정보에서 stdout을 먼저 올바르게 설정했으므로 둘 다 /dev/null이 됩니다.

관련 정보