프로세스 대체의 사용 사례에 대한 이해가 부족한 것 같습니다. 내 직감은 프로세스 대체 형태가 <(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/file
cat /some/file
tee >(foo)
tee /some/file
foo < /some/file