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

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

hello다음 코드를 포함하는 실행 가능한 스크립트가 있습니다.

#!/bin/bash
echo "hello" > /dev/tty

출력을 /dev/null.

./hello > /dev/null 2>&1

stdout및 만 리디렉션하기 때문에 작동하지 않습니다 stderr.

명령을 사용하여 이 작업을 수행할 수 있다고 주장하는 두 가지 답변을 찾았 script지만 방법은 설명하지 않습니다.

https://unix.stackexchange.com/a/297237/421466

https://unix.stackexchange.com/a/296108/421466

아니면 출력을 억제하는 다른 방법이 있습니까?

답변1

스크립트 변경

파일 설명자 3이 아직 사용되지 않는다고 가정합니다.

#!/bin/bash
exec 3>/dev/tty
#exec 3>/dev/null
echo "hello" >&3

/dev/ttyfd 3을 또는 로 열면 /dev/null쉽게 전환할 수 있습니다. 그런 다음 > /dev/tty모두 >&3.

스크립트가 변경되지 않았습니다.

스크립팅 외부의 해결 방법은 마운트 네임스페이스( man unshare) 를 생성하고 mount --bind /dev/null /dev/tty그 안에서 실행한 다음 거기에서 수정되지 않은 스크립트를 실행하는 것입니다.

관련 정보