백그라운드 작업을 종료할 때 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리디렉션 stderr" 을 추가하고 "모든 출력을 빈 장치로 리디렉션"을 stdout사용했습니다 . > /dev/null그러나 출력은 여전히 ​​터미널에 표시됩니다.

설명이 있나요?

미리 감사드립니다.

업데이트 정보:

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

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

답변1

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

관련 정보