때때로 프로세스 대체가 예상대로 작동하지 않습니다. 예를 들면 다음과 같습니다.
입력:
gcc <(echo 'int main(){return 0;}')
산출:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
입력:
그러나 다른 명령과 함께 사용하면 예상대로 작동합니다.
grep main <(echo 'int main(){return 0;}')
산출:
int main(){return 0;}
다른 명령과 유사한 실패를 발견했습니다 (즉, 프로세스 대체에서 파일을 기대하는 명령은 사용할 수 /dev/fd/63
없거나 유사합니다). 이 실패 gcc
는 가장 최근의 것입니다. 프로세스 대체가 언제 이런 식으로 실패하고 사용되어서는 안되는지 결정하기 위해 알아야 할 일반적인 규칙이 있습니까?
우분투 12.04 에서이 BASH 버전을 사용하고 있습니다 (아치 및 데비안에서도이를 보았습니다) :
GNU bash, 4.3.11 (1) -release (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')
언어를 C
명시 적으로 설정하십시오 .
illegal seek
대답과 같은 모습 일 -|pipe
그bash
에 실행 된 프로그램의 포인트는 시크 파일이 아닙니다. 아마도echo data | command /dev/fd/0
프로그램에서 성공적으로 수행 할 수 없다면 비슷한 행운을 얻습니다<(cmd)
. 디스크 파일을 제공하지 않습니다. 파이프 파일 디스크립터를 가리키는 인수 만 대체합니다.