읽기 명령은 로컬로 작동하지만 wget은 실패합니다.

읽기 명령은 로컬로 작동하지만 wget은 실패합니다.

간단한 .sh 스크립트를 사용하고 있으므로 read와 함께 명령을 사용 하려고 합니다 .wget

# echo "Please answer by : -> yes <- or -> no <-"
# read answer
# echo $answer

이 코드는 로컬에서는 잘 작동하지만 read명령은 원격으로 실패 wget하고 응답을 기다리지 않고 완료됩니다.

# wget -qO - 'https://testserver/pub/test.sh' | bash -x
# + echo 'Please answer by : -> yes <- or -> no <-'
# Please answer by : -> yes <- or -> no <-
# + read answer
#

당신의 도움을 주셔서 감사합니다.

답변1

bash터미널에서 스크립트를 실행하면 bash는표준 입력(하나만 있습니다) 키보드에서.

keyboard -> script

스크립트를 bash파이프에 공급하면 파이프는 다음과 같이 됩니다.표준 입력. 따라서 다음을 수행하면 문제는 wget과 관련이 없습니다.

cat test.sh | bash -x

이제 입력이 키보드가 아닌 파이프에서 나오므로 동일한 동작을 수행하게 됩니다. 스크립트가 bash이를 상속합니다.표준 입력.

pipe -> script

파이프라인의 데이터가 완료되면 bash와 스크립트도 완료됩니다.

이 문제를 해결하는 한 가지 방법은 다운로드한 다음 실행하는 것입니다(꼭 그럴 필요는 없지만 -O행을 그대로 유지하려고 합니다). 이 같은:

$ wget -qO test.sh 'https://testserver/pub/test.sh' && bash test.sh

관련 정보