![백그라운드 작업을 종료할 때 I/O 리디렉션이 작동하지 않는 이유는 무엇입니까?](https://rvso.com/image/122424/%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%A2%85%EB%A3%8C%ED%95%A0%20%EB%95%8C%20I%2FO%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
[~]$ kill %123
bash: kill: %123: no such job
[~]$ kill %123 2>&1 > /dev/null
bash: kill: %123: no such job
백그라운드 작업을 종료하는 동안 모든 출력을 비활성화하고 싶습니다.
첫 번째 출력이 예상됩니다. 그러나 두 번째 출력은 그렇지 않습니다.
명령줄에 표시된 대로 리디렉션을 추가 하고 2>&1
모든 출력 을 null 장치로 리디렉션하는 데 사용합니다. 그러나 출력은 여전히 터미널에 표시됩니다.stderr
stdout
> /dev/null
설명이 있나요?
미리 감사드립니다.
업데이트 된 정보:
다음 명령은 예상대로 작동합니다.
kill %123 > /dev/null 2>&1
답변1
출력 리디렉션은 프로세스의 속성입니다. 따라서 2>&1로 리디렉션할 때 다음이 설정됩니다.현재의stdout을 현재 TTY인 stderr로 출력한 다음 >은 stdout을 /dev/null로 설정하여 stderr을 TTY로 설정합니다. 업데이트된 정보에서 stdout을 먼저 올바르게 설정했으므로 둘 다 /dev/null이 됩니다.