Tty
通過附加到目前 tty 的 su 執行 heredoc 腳本
我正在嘗試做這樣的事情:
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
.