bash에 대한 "읽기" 파이핑 스크립트

bash에 대한 "읽기" 파이핑 스크립트

bashbash를 사용하여 직접 실행하는 대신 파이프를 통해 스크립트를 실행해야 합니다 wget.

$ wget -O - http://example.com/my-script.sh | bash

내 스크립트 read에 명령문이 있기 때문에 작동하지 않습니다. 어떤 이유로 bash로 파이프하면 작동하지 않습니다.

# Piping to bash works in general
$ echo 'hi'
hi
$ echo "echo 'hi'" | bash
hi

# `read` works directly
$ read -p "input: " var
input: <prompt>

# But not when piping - returns immediately
$ echo 'read -p "input: " var' | bash
$

읽기 명령은 input:값을 묻는 메시지를 표시하지 않고 직접 전달됩니다 bash.

read스크립트를 파이프하는 방법을 아는 사람이 있습니까 bash?

답변1

read표준 입력에서 읽습니다. 그러나 bash 프로세스의 표준 입력은 스크립트에 의해 얻어졌습니다. 셸에 따라 read셸이 이미 전체 스크립트를 읽고 구문 분석했기 때문에 아무것도 읽히지 않거나 read스크립트에서 예측할 수 없는 줄이 소비됩니다.

간단한 솔루션:

bash -c "$(wget -O - http://example.com/my-script.sh)"

이 특정 시나리오에 대한 좋은 솔루션을 설명하기보다는 교육 목적으로 더 복잡한 솔루션입니다.

echo '{ exec </dev/tty; wget -O - http://example.com/my-script.sh; }' | bash

답변2

프로세스 대체는 원하는 작업을 수행합니다.

bash <(wget ...)

즉, 나는 당신의 동기에 대해 의문을 제기해야 합니다. 웹 서버를 제어하고 https를 사용하는 경우 이는 의미가 있을 수 있습니다. 하지만 인터넷에서 무작정 스크립트를 실행하는 것은 매우 위험합니다.

답변3

질문:

wget -O tmpscript.sh http://example.com/my-script.sh
chmod +x tmpscript.sh
tmpscript.sh

?

관련 정보