Tty

通過附加到目前 tty 的 su 執行 heredoc 腳本

  • June 8, 2017

我正在嘗試做這樣的事情:

sudo su <<EOF
select x in a b c; do echo "Selected $x"; break; done
EOF

但是,它在不接受輸入的情況下終止。

如果我這樣做,它會起作用:

sudo su -c 'select x in a b c; do echo $x; break; done'

但是用 heredoc 編寫更長的腳本會更好(是的,我知道將它們放在文件中更好)。

我確信這在各個地方都得到了回答,但我似乎無法找到正確的 bash/heredoc/tty/stdin 搜尋片語合。

有什麼辦法可以做到這一點?

問題是select試圖從標準輸入讀取,該標準輸入被重定向到 here-doc。由於那裡沒有對提示的響應,因此出現錯誤。

解決方案是將輸入重定向回 here-doc 中的終端。

sudo -s <<'EOF'
select x in a b c; do 
   echo "Selected $x"
   break
done </dev/tty
EOF

此外,您需要在此處加上引號EOF以防止變數擴展。否則它會$x在原始 shell 中擴展,而不是在從select.

引用自:https://unix.stackexchange.com/questions/369776