파이프를 사용하여 소스 명령 제공

파이프를 사용하여 소스 명령 제공

source이전에는 다음과 같은 명령을 사용했습니다 .

source file_name

하지만 내가 하고 싶은 것은:

echo something | source

이것은 작동하지 않습니다.

답변1

source(또는 .) 파일을 인수로 사용하므로 프로세스 대체를 시도할 수 있습니다 .

source <(echo something)

답변2

소스 명령에 파일 매개변수가 필요합니다. 일부 쉘에서는 프로세스 대체를 통해 이를 수행할 수 있습니다. 쉘은 동일한 방식으로 대체하기 때문입니다.

arg=$(echo hi)

... echo프로세스 교체의 경우 하위 쉘을 명명된 파일(보통 /dev/fd/62또는 다른 것)로 대체하는 명령줄의 하위 쉘 출력이 있는 비트입니다. 파일 설명자에 대한 일부 링크입니다. 파이프의 경우 파일 설명자는 0이므로...

echo 'echo hi' | . /dev/fd/0

... /dev/stdin또는 어떤 경우이든 모든 Linux 시스템에서 잘 작동할 것입니다. 그 외에도 많은 시스템이 있습니다. 여기에서 문서를 비슷하게 사용할 수 있습니다.

. /dev/fd/3 3<<HI
$(echo 'echo hi')
HI

다음을 통해 쉘이 프로세스 대체를 처리하는 방법을 확인할 수 있습니다.

(set -x; readlink <(:))

...인쇄(존재하다 bash):

+ set +x
+ readlink /dev/fd/63
++ :
pipe:[2212581]

...그래서 우리는 쉘이 대체를 수행하고 readlink파일 설명자 63에 열린 익명 파이프에서 읽는 것을 볼 수 있습니다.

관련 정보