source(.) 파이프 컬 출력

source(.) 파이프 컬 출력

내 웹 서버에 다음 내용이 포함된 파일 f가 있습니다.

alias ll='ls -l'

다른 Linux 시스템에서 다음을 수행하고 싶지만 명령을 올바르게 실행할 수 없습니다.

curl http://myserver/f | ?

어디? 각 줄은 현재 환경으로 읽혀집니다. 따라서 위의 파일이 주어지면 이는 실행과 동일한 효과를 갖습니다.

% alias ll='ls -l'

현재 쉘 프로세스에서. 가능합니까?

답변1

사용해 보는 것은 어떨까요 eval "$(curl "$URL")"?

하지만 올바른 URL을 얻었는지, 다운로드한 코드가 불쾌한 일을 하지 않는지 확인하는 것이 좋습니다.

답변2

Bash에서는 다음과 같이 명령 /dev/stdin출력을 한 줄로 리디렉션한 curl/dev/stdin소싱을 시도 할 수 있습니다.

source /dev/stdin  <<< "$(curl http://myserver/f)"

이렇게 하면 하위 쉘(상위 쉘에는 표시되지 않음)에서 (소스) 변수 할당을 피해야 합니다.

답변3

파이프는 항상 하위 쉘을 생성하는 것 같습니다. 어쩌면 파일 교체가 여기에서 더 적절할 수도 있습니다.

## this doesn't work
# curl http://myserver/f | . /dev/stdin

## this works
. <(curl http://myserver/f)

관련 정보