curl에서 sh로 파이프하기 전에 쉘 스크립트를 읽고 확인하십시오 (curl -s [url] | sh) 스크립트를 읽은 후 실행을 확인할 수있는

웹에서 쉘 스크립트를 실행해야 할 때마다 curl -s [url] | sh먼저 url웹 브라우저에서 스크립트가 악성이 아니고 실행하기에 안전한지 확인하기 위해 엽니 다 .

커맨드 라인에서 스크립트를 읽은 다음 스크립트를 읽은 후 실행을 확인할 수있는 커맨드 라인 트릭을 본 것을 기억합니다. 올바르게 기억 curl -s [url] | something...here | sh하면 소프트웨어 처럼 보일 필요가 없습니다.

누구 든지이 트릭을 알고 있습니까?



답변

에 유틸리티가있다 moreutils라는 vipe쇼 당신은 revew하고이 표준 출력에 전달되기 전에 파일을 수정할 수 있습니다 편집기에서 stdin을 그게.

설치하지 않으려는 경우 moreutils다음과 유사한 작업을 수행 할 수 있습니다.

file=$(mktemp); curl -s "$url" > $file; $EDITOR $file; sh $file; rm $file

mktempcoreutils매우 가능성이 이미 시스템에 설치되어 있습니다.


답변

나는 당신이 묘사 한 것을 할 수있는 단일 유틸리티를 생각할 수 없지만 쉘 스 니펫을 만드는 것은 쉽습니다.

script=$(curl -s "$url")
printf "%s\nDo you want to run this script? [yN]" "$script"
read line
case $line in
  [Yy]|[Yy][Ee][Ss]) sh -c "$script";;
esac

스크립트가 텍스트 파일이라고 가정합니다. 널 바이트는 지원되지 않습니다. 쉘에 따라 제거되거나 행 또는 전체 파일이 잘릴 수 있습니다. 또한 파일 끝의 모든 줄 바꿈이 제거됩니다 (heredoc 구문은 다시 줄 바꿈). 일반적으로 스크립트에는 문제가되지 않지만, 예를 들어 스크립트가 2 진 형식의 아카이브로 압축을 푼 경우 일 수 있습니다. 이진 스크립트가 언젠가 잘못 인코딩 될 위험이 크기 때문에 파일을 배포하는 매우 안정적인 방법은 아닙니다. 그럼에도 불구하고 스크립트를 임시 파일에 작성하여 처리 할 수 ​​있습니다.

script_file=$(mktemp)
curl -s "$url" | tee "$script_file"
printf "Do you want to run this script? [yN]"
read line
case $line in
  [Yy]|[Yy][Ee][Ss]) sh "$script_file";;
esac
rm "$script_file"

답변

특수 목적 도구가 필요할 정도로 자주 다운로드하여 실행할 스크립트 소스를 찾을 수있을뿐만 아니라 왜이 작업을 수행해야하는지 상상하기 어렵습니다.

왜 그냥으로 스크립트를 다운로드 curl(또는 wget이나 snarf과가 실행함으로써 중 – 또는 무엇이든), 검사 및 편집이 (가 특정 시스템에 대한 희귀 스크립트 않을 필요가 일부 사용자 정의의) 다음은 실행 chmod이나와 sh scriptname?


답변

이 명령 행을 사용하십시오.

curl URL | ( cat > /tmp/file; read REPLY; [[ ! $REPLY =~ ^[Yy]$ ]] && cat /tmp/file ) | sh

작은 기능을 사용할 수 있습니다.

curlsh()
{
    curl "$1" \
    | ( cat > /tmp/file;read REPLY; [[ ! $REPLY =~ ^[Yy]$ ]] && cat /tmp/file ) \
    | sh
}

그리고 이런 식으로 사용하는 것보다 :

curlsh http://site.in.net/path/to/script

답변

read 가 -p (prompt)를 알고 있고 shebang에 의해 지정된 인터프리터로 스크립트를 실행할 필요가 없다고 가정합니다 .

curl URL | tee /tmp/x && read -p "execute?" key ; test $key = y && sh /tmp/x