프로세스 교체의 목적에 대한 오해

프로세스 교체의 목적에 대한 오해

프로세스 대체의 사용 사례에 대한 이해가 부족한 것 같습니다. 내 직감은 프로세스 대체 형태가 <(COMMANDS)실행된 COMMANDS다음 프로그램 결과를 그것이 속한 명령에 공급하므로 결과가 command1 <(command2)평가되어 command2에 첫 번째 인수로 전달된다는 것입니다 command1.

나는 다음이 효과가 있다고 생각합니다.

$ for i in <(cat list.txt); do echo $i; done

list.txt단어 목록(개행으로 구분)이 포함된 파일은 어디에 있습니까? 이를 실행하면 /dev/fd/63프로세스 교체 시 생성된 하위 쉘의 출력에 대한 임시 경로 이름과 같다고 가정할 수 있는 것만 출력됩니다.

내가 글을 쓸 때 잘 작동했기 때문에 위의 내용이 효과가 있을 것이라고 생각했습니다.

$ for i in `cat list.txt`; do echo $i; done

이 기호를 본 적이 없습니다. 이 기호 `는 무엇을 의미하나요? 프로세스 대체에 대해 어떤 이해가 부족합니까?

답변1

`foo`명령 대체, 프로세스 대체보다는. $(foo)또한 명령 대체이며 중첩된 명령 대체를 사용하는 것이 더 쉽기 때문에 선호되는 형식입니다 $(foo1 $(foo2 $(foo3 ...))).

`foo`/ 를 명령으로 바꾸면 $(foo)의 출력이 foo명령줄의 단어로 사용됩니다. 그래서 for i in $(echo a b c)당신이 그것을 사용한 것과 같습니다 for i in a b c. 먼저 명령 대체에서 명령을 실행하고 출력을 얻은 다음 출력을 사용하여 다음 명령줄을 만든 다음 해당 명령줄을 실행하는 등의 작업을 수행합니다. 이를 통해 명령이나 함수를 사용하여 for 루프에 의해 반복되는 목록을 생성할 수 있습니다. 필드 분할, 와일드카드 확장 등이 모두 발생하므로 인용은 명령 대체에서 중요한 고려 사항입니다.

그리고프로세스 교체, <(foo)/ >(foo), 프로세스의 stdin/stdout이 파일로 제공되므로 and 를 cat <(foo)사용한 것과 같고 , and 를 사용한 것과 같습니다 . 이러한 명령은 동시에 실행됩니다. 쉘은 출력을 볼 수 없으므로 필드 분할 및 와일드카드 확장은 문제가 되지 않습니다.foo > /some/filecat /some/filetee >(foo)tee /some/filefoo < /some/file

관련 정보