c24*_*24w 4 su tty stdin here-document
我正在尝试做这样的事情:
sudo su <<EOF
select x in a b c; do echo "Selected $x"; break; done
EOF
Run Code Online (Sandbox Code Playgroud)
但是,它会终止而不接受输入。
如果我这样做,它会起作用:
sudo su -c 'select x in a b c; do echo $x; break; done'
Run Code Online (Sandbox Code Playgroud)
但用heredoc编写更长的脚本会更好(是的,我知道将它们放在文件中更好)。
我确信这个问题在各个地方都有答案,但我似乎无法找到正确的 bash/heredoc/tty/stdin 搜索词组合。
有什么办法可以实现这一点吗?
问题是select
尝试从标准输入读取,该标准输入被重定向到此处文档。由于没有对提示做出响应,因此会出现错误。
解决方案是将输入重定向回此处文档中的终端。
sudo -s <<'EOF'
select x in a b c; do
echo "Selected $x"
break
done </dev/tty
EOF
Run Code Online (Sandbox Code Playgroud)
另外,您需要EOF
在此处的文档中添加引号以防止变量扩展。否则它会$x
在原始 shell 中扩展,而不是在从 获取值的子 shell 中扩展select
。