>&[FILE_DESCRIPTOR] 및 >& 파일 bash 리디렉션 연산자

>&[FILE_DESCRIPTOR] 및 >& 파일 bash 리디렉션 연산자

나는 bash 리디렉션에 대해 읽었으며 이에 관한 두 기사를 발견했습니다.

파일 설명자를 >&file만드는 방법file

답변1

실제로 서로 충돌하는 두 개의 서로 다른 연산자입니다. 하나는 Bourne 쉘에서, 다른 하나는 C 쉘에서 발생합니다.

cmd >&2

부족

cmd 1>&2

cmdstdout(fd 1)이 동일한 리소스( 동일한 리소스)에 연결되어 있는지 여부파일 설명 열기)는 fd 2와 동일합니다( x>&y(또는 x<&y정확히 동일) fd x를 fd y와 동일한 리소스로 리디렉션합니다).

cmd >& file

실행 시 C 쉘( csh) 연산자 의 fd 1과 2 cmd는 모두 새로운파일 설명 열기file쓰기 전용 모드로 열어서 얻습니다. Bourne 쉘 구문에서 이에 상응하는 것은 다음과 같습니다.cmd > file 2>&1

그들은 충돌합니다. 실제로 어떤 것이 사용되는지는 대상이 숫자인지 여부에 따라 다릅니다.

당신이 가지고 있다면:

cmd >&"$file"

$file일련의 십진수가 포함되면 Bourne 쉘 연산자가 사용되고, 그렇지 않으면 C 쉘 연산자가 사용됩니다!

그렇기 때문에 csh 연산자 사용을 피하고 > file 2>&1대신 Bourne 쉘 구문( )을 사용하는 것이 가장 좋습니다.

bash대안으로 연산자 (and ) zsh도 있지만 이는 POSIX에서 실행되도록 되어 있으므로 POSIX 규정을 위반한다는 점에 유의하세요 . 하지만 위와 같은 충돌 문제는 없습니다.&>>&cmd &> filecmd &> filesh

관련 정보