변수에 저장된 파일 설명자를 어떻게 사용합니까?

변수에 저장된 파일 설명자를 어떻게 사용합니까?

예를 들어, 내가 할당한다면

TWO=2

...다음은 실패합니다( 사용 date: invalid date '2').

date >> logfile $TWO>&1

물론 난 언제나 할 수 있어

eval "date >> logfile $TWO>&1"

이것이 파일 설명자 중 적어도 일부가 변수로 나타나는 스트림 리디렉션이 포함된 표현식을 실행하는 유일한 방법입니까?

답변1

넌 할 수있어

  • 5<&"$fd": Bourne과 유사한 쉘에서 fd를 fd 5(여기서 5는 리터럴)로 복사합니다(그러나 yash가 posix 모드에 있을 때 $fd읽기용으로 열려 있지 않으면 이 함수가 작동하지 않습니다).$fd
  • {fd}<&-: $fdzsh, bash, ksh93에서 fd를 닫습니다.

하지만 해당 콘텐츠에 십진수만 포함된 경우 콘텐츠를 "$fd">anything출력하지 않으려면 그렇게 할 수 없습니다.echo "$something">file$somethingfile

{fd}> somethingzsh, bash 및 ksh93에서는 9+에서 fd 자동 할당을 사용할 수 있습니다 .저장됨Enter 를 입력하십시오 $fd. 그러나 그것은 당신이 요구하는 것이 아닙니다.

내가 아는 한, eval.

eval다음을 사용하여 리디렉션으로만 사용을 제한 할 수 있습니다 exec.

(eval "exec $TWO>&1"; exec date) >> logfile

쉘에서도 동일한 상황이 발생합니다 fish.

및 Derivatives에서도 마찬가지입니다 rc. 여기서 구문은 다음과 같 >[3=5]으며 두 fd는 모두 리터럴이어야 합니다.

관련 정보