zsh에서 파일 설명자 이동

zsh에서 파일 설명자 이동

ls 3>&2 2>&1 1>&3-의 구문은 파일 설명자 이동을 전혀 지원하지 않는 등 보다 제한된 셸 과 zsh일치하는 방식으로 동작합니다 . 표준 오류 시 디렉터리 내용을 내보내거나 잘못된 파일 설명자 번호에 대해 불평하는 대신 아무것도 인쇄하지 않습니다. 파일 설명자를 이동한다는 것은 무엇을 의미합니까 ? 지금까지 저는 OS X(홈브류를 통해 설치된 최신 버전 사용)에서 다양한 쉘만 테스트했습니다.kshbashdashzsh

먼저 임시 폴더를 만듭니다

$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch a
$ touch b

ls 3>&2 2>&1 1>&3-그런 다음 및 를 실행하면 bashksh다 파일 설명자 이동을 지원합니다.

$ bash -c 'ls 3>&2 2>&1 1>&3-'
a       b

$ bash --version | head -n 1
GNU bash, version 4.4.5(1)-release (x86_64-apple-darwin15.6.0)

ksh다음과 유사한 동작

$ ksh -c 'ls 3>&2 2>&1 1>&3-'
a       b

$ ksh --version
version         sh (AT&T Research) 93u+ 2012-08-01

dash이 구문을 지원하지 않는 쉘의 예입니다. 1>&3-잘못된 형식의 복제본으로 해석됩니다 .

$ dash -c 'ls 3>&2 2>&1 1>&3-'

대시: 1: 구문 오류: 잘못된 fd 번호

zsh, 이상하게도 아무것도 인쇄되지 않습니다.

$ echo -n '<'; zsh -c 'ls 3>&2 2>&1 1>&3-'; echo '>'
<>

$  zsh --version
zsh 5.2 (x86_64-apple-darwin15.4.0)

zsh기본 복사 및 종료가 수행되는 순서가 및 와 bash다릅니 까 ksh? 이 기능을 구현하는 데 오류가 있습니까?

답변1

zshbash또는 같은 이동 파일 설명자 구문은 지원되지 않습니다 ksh. 이는 1>&3-표준 출력 및 표준 오류를 다음 이름의 파일로 리디렉션하는 것을 의미합니다 3-.

$ echo -n '<'; zsh -c 'ls 3>&2 2>&1 1>&3-'; echo '>'
<>
$ ls
3- a b

bashPOSIX 셸에서와 동일한 이동 파일 설명자 동작을 달성하려면 다음을 수행하세요 ksh.

sh -c 'ls 3>&2 2>&1 3>&1 3>&-'

이는 1>&3-내부적으로 수행되는 작업으로 파일 설명자 3을 파일 설명자 1에 복사한 다음 파일 설명자 3을 닫습니다.bashksh

관련 정보