bash
bash를 사용하여 직접 실행하는 대신 파이프를 통해 스크립트를 실행해야 합니다 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
?