다음 오류를 억제하는 방법
if true </dev/tty 2>/dev/null; then
read -r "$VARIABLE" </dev/tty
fi
이 오류는 무시할 수 없는 것 같습니다 can't open /dev/tty: No such device or address
. 이것이 전체 if 절의 목적입니다. 오류가 발생했습니다.if ...
답변1
첫 번째 리디렉션 stderr:
if true 2>/dev/null </dev/tty; then
IFS= read -r "$VARIABLE" </dev/tty
fi
을 사용하려면 zsh
다음이 필요합니다.
if { true </dev/tty; } 2> /dev/null; then
IFS= read -r "$VARIABLE" </dev/tty
fi
리디렉션이 실패하면 zsh는 오류 메시지를 출력하기 전에 fd를 복원합니다(이것은 나에게는 이해가 되지만 외부 명령을 리디렉션할 때 복원이 발생하지 않으므로 일관되지 않은 동작을 의미합니다).
프로세스의 제어 tty 장치(있는 경우)에서 한 줄을 읽고 싶다고 가정해 보겠습니다.
그러나 이것은 다르다
IFS= read -r "$VARIABLE" 2> /dev/null </dev/tty
/dev/tty
열 수 없으면 명령(여기)이 실행되지 않습니다 .read
다음과 같이 할 수도 있습니다.
{ IFS= read -r "$VARIABLE" < /dev/tty 2>&3 3>&-; } 3>&2 2> /dev/null
stderr 을 /dev/null
열기 전에 리디렉션하고 열기 후에 복원합니다(읽기 오류(있는 경우)를 계속 보고할 수 있도록)./dev/tty
read
read