대시 실행 리디렉션 오류

대시 실행 리디렉션 오류

이것:

set -x
rm -f p; mkfifo p
exec 99<>p

Bash에서는 성공하지만 "99 not found"대시( )에서는 실패합니다.

대시에서 작동하게 하려면 어떻게 해야 합니까?

답변1

Bourne Shell과 그 후속 ksh88에서 파생된 POSIX 표준에서는 이것이 작동할 수 없다고 명시적으로 언급합니다. 그 이유는 쉘 구문 때문입니다.

<>file

읽기 및 쓰기를 위한 개방형 표준 입력 및:

[n]<>file

n읽고 쓰기 위해 파일 설명자를 엽니다 .

n이 경우에는 숫자입니다.

POSIX에서 지정한 범위를 벗어난 두 자리 숫자인 99를 사용했습니다. 따라서 파서는 이를 리디렉션 연산자와 관련된 숫자로 처리하지 않고 별도의 인수로 처리합니다. 따라서 이 매개변수는 실행될 파일로 간주됩니다 exec.

이식 가능한 스크립트를 선호한다면 POSIX 표준을 따르십시오. 완전히 이식 가능한 스크립트를 작성하려면 스크립트를 Bourne Shell과 100% 호환되도록 만드십시오.

귀하의 경우에는 99를 사용할 이유가 없는 것 같으므로 9를 사용하는 것이 좋습니다.

관련 정보