파일 리디렉션 오류를 억제하는 방법

파일 리디렉션 오류를 억제하는 방법

다음 오류를 억제하는 방법

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/ttyreadread

관련 정보