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/tty
fd 3을 또는 로 열면 /dev/null
쉽게 전환할 수 있습니다. 그런 다음 > /dev/tty
모두 >&3
.
스크립트가 변경되지 않았습니다.
스크립팅 외부의 해결 방법은 마운트 네임스페이스( man unshare
) 를 생성하고 mount --bind /dev/null /dev/tty
그 안에서 실행한 다음 거기에서 수정되지 않은 스크립트를 실행하는 것입니다.