나는 bash 리디렉션에 대해 읽었으며 이에 관한 두 기사를 발견했습니다.
첫 번째:
https://www.brianstorti.com/understanding-shell-script-idiom-redirect
설명하다
&[FILE_DESCRIPTOR]를 사용하여 파일 설명자 값을 참조할 수 있습니다.
그런데 두 번째 글과 동시에 읽어보니
두번째
https://catonmat.net/bash-one-liners-explained-part-Three
그것은 상태
또한 Bash에서는 다음과 같이 작성됩니다.
$ command &>file
정확히 다음과 같습니다:
$ command >&file
그러나 첫 번째 형식이 선호됩니다.
파일 설명자를 >&file
만드는 방법file
답변1
실제로 서로 충돌하는 두 개의 서로 다른 연산자입니다. 하나는 Bourne 쉘에서, 다른 하나는 C 쉘에서 발생합니다.
cmd >&2
부족
cmd 1>&2
cmd
stdout(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 &> file
cmd &
> file
sh