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에 열린 익명 파이프에서 읽는 것을 볼 수 있습니다.