Bash
將帶有“read”的腳本傳遞給 bash
我需要通過管道來執行一個腳本(而不是直接用 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
tobash
?
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