![Bash의 대화형 감지에 대한 질문](https://linux55.com/image/61377/Bash%EC%9D%98%20%EB%8C%80%ED%99%94%ED%98%95%20%EA%B0%90%EC%A7%80%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%A7%88%EB%AC%B8.png)
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
여전히 대화형으로 호출됩니다.