bash에 입력되는 스크립트에 인수를 전달하는 방법


10

지금은 다음과 같이 한 줄짜리가 있습니다.

curl -fsSL http://git.io/vvZMn | bash

스크립트를 다운로드하여 stdin 파일로 bash에 전달합니다. 추가 인수로이 스크립트를 실행하고 싶습니다 print.

아마도 이런 식으로 뭔가?

curl -fsSL http://git.io/vvZMn | bash -- print

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


4
당신은 무엇을 기대하고 print여기서 뭘? 실행중인 명령을 표시 하시겠습니까? 그렇다면을 시도하십시오 bash -x. 참고 :이 curl | bash루틴은 방대한 보안 허점입니다. 서버가 pwn 될 때까지 무엇이 실행 될지 알 수 없습니다.
Stephen Harris

답변:


16

나는 당신이 찾고있는 것이 -s옵션 이라고 생각합니다 . 을 사용하면 -s인수를 스크립트에 전달할 수 있습니다.

이것을 설명하기위한 더미 예제로서 :

$ echo 'echo 1=$1' | bash -s -- Print
1=Print

여기에서 stdin에 제공된 스크립트에 위치 매개 변수가 제공되어 있음을 알 수 있습니다 Print. 당신의 스크립트는 -u UUID논쟁을 취 하며 그것은 또한 수용 될 수 있습니다 :

$ echo 'echo arguments=$*' | bash -s -- -u UUID print
arguments=-u UUID print

따라서 귀하의 경우 :

curl -fsSL http://git.io/vvZMn | bash -s -- print

또는,

curl -fsSL http://git.io/vvZMn | bash -s -- -u UUID print

Stephen Harris가 지적했듯이 보이지 않는 스크립트를 다운로드하여 실행하는 것은 보안상의 문제입니다.


3

시스템에을 /dev/stdin사용하면

$ echo 'echo 1=$1' | bash /dev/stdin print
1=print

이 작업 수행 하지 마십시오 :

$ echo 'echo 1=$1' | bash /dev/stdin -- print
1=--

을 사용하려면 다음 --을 수행하십시오.

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.