Bash의 대화형 감지에 대한 질문

Bash의 대화형 감지에 대한 질문

Bash의 대화형 감지에 대해 질문이 있습니다.

다음 스크립트는 대화형 모드에서 호출되는지 여부에 관계없이 인쇄됩니다.

$ cat int.sh 
#!/bin/bash

if [ -t 0 ]; then
    echo "interactive"
else
    echo "not interactive"
fi

통화의 몇 가지 예...

$ ./int.sh 
interactive
$ echo toto | ./int.sh
not interactive
$ ./int.sh < ./int.sh
not interactive
$ ./int.sh <<EOF
> hello world!
> EOF
not interactive

그런데 다음 사례 결과가 대화형인 이유는 무엇입니까?

$ ./int.sh <( cat ./int.sh )
interactive

답변1

Bash의 진술은 다음 <(...)과 같습니다.프로세스 교체. 프로세스가 <(...)실행되면 해당 입력 또는 출력이 FIFO 또는 파일에 연결됩니다 /dev/fd. 확인 해봐:

echo <(echo foo)

그것 은 그런 것을 인쇄 합니다 /dev/fd/63. 이것이 파일 설명자입니다. 그런 다음 해당 <(...)부분은 해당 파일 설명자로 대체됩니다. 따라서 선언에서 호출은 다음과 같습니다.

./int.sh <( cat ./int.sh )

다음으로 교체:

./int.sh /dev/fd/63

따라서 이는 스크립트에 대한 매개변수일 뿐이며 ./int.sh여전히 대화형으로 호출됩니다.

관련 정보