온라인 스크립트를 정상적으로 실행

온라인 스크립트를 정상적으로 실행

문맥

다음을 사용하여 실행할 수 있는 스크립트를 게시하는 사이트를 설정했습니다.

curl -so /tmp/script http://scripts.programster.org/scripts/1?output=raw && . /tmp/script

이 예제 스크립트는 "hello world"를 터미널에 출력합니다.

보시다시피 이것은 꽤 길고 혼란스럽습니다. 사용자가 /tmp/script.

curl -s http://scripts.programster.org/scripts/1?output=raw | bash

#!/usr/bin/php하지만 이 명령이 PHP와 같은 다른 언어로 작성된 스크립트( 스크립트 위에 사용됨) 와 함께 작동하기를 원했기 때문에 첫 번째 명령을 변경했습니다.

질문

로컬 파일 시스템에 저장하지 않고도 온라인 스크립트를 실행할 수 있고 어떤 프로그램에서 실행할지 미리 알 수 없는 방법이 있습니까? 어쩌면 파일과 같은 URL을 처리하는 방법이 있을 수도 있습니다. 이를 통해 다음을 수행할 수 있습니다.

. http://scripts.programster.org/scripts/1?output=raw

답변1

보안 문제는 제쳐두고 (점) 명령 wget과 함께 수행할 수 있는 외부 스크립트 실행의 위험을 인식하시기 바랍니다.source

. <(wget -q -O- http://scripts.programster.org/scripts/1?output=raw)

이는 스크립트 텍스트를 현재 쉘로 가져오는 것을 의미합니다.

wget -O-STDOUT으로 다운로드하고 -q조용하게 만듭니다(메시지 없이).

<(any command)출력을 파일로 해석할 수 있는 프로세스 대체입니다.

wget -q -O-PS 컬 - is 와 동일curl -s -o-

고쳐 쓰다

위의 예는 외부 스크립트의 she-bang을 사용하지 않고 호출 쉘의 컨텍스트에서 실행됩니다. 쉬뱅라인을 활용하기 위해서는,~ 해야 하다파일을 저장하고 실행 가능하게 만든 다음 실행하십시오.

이를 사용하여 고유한 이름을 보장할 수 mktemp있으며 임시 파일을 삭제하는 책임은 귀하에게 있습니다. 이는 외부 URL을 매개변수로 사용하는 래퍼에 결합될 수 있습니다.

다음은 이러한 래퍼에 대한 실제 예제 코드입니다.

#/bin/bash
exturl=${1?"No external url specified"}
tmpexe=$(mktemp)
trap 'rm $tmpexe' EXIT
curl -s $exturl  -o $tmpexe
chmod 0755 $tmpexe
$tmpexe

관련 정보