예를 들어, 내가 할당한다면
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}<&-
:$fd
zsh, bash, ksh93에서 fd를 닫습니다.
하지만 해당 콘텐츠에 십진수만 포함된 경우 콘텐츠를 "$fd">anything
출력하지 않으려면 그렇게 할 수 없습니다.echo "$something">file
$something
file
{fd}> something
zsh, bash 및 ksh93에서는 9+에서 fd 자동 할당을 사용할 수 있습니다 .저장됨Enter 를 입력하십시오 $fd
. 그러나 그것은 당신이 요구하는 것이 아닙니다.
내가 아는 한, eval
.
eval
다음을 사용하여 리디렉션으로만 사용을 제한 할 수 있습니다 exec
.
(eval "exec $TWO>&1"; exec date) >> logfile
쉘에서도 동일한 상황이 발생합니다 fish
.
및 Derivatives에서도 마찬가지입니다 rc
. 여기서 구문은 다음과 같 >[3=5]
으며 두 fd는 모두 리터럴이어야 합니다.