2015-07-28 48 views
1

我想超级用户权限内的read命令来读取输入:在shell脚本提示输入根会话

sudo read p 

返回错误:

sudo: read: command not found 

并在以下:

sudo -s <<EOF 
read p 
EOF 

read正在被跳过。

那么,如何在shell脚本的根会话中使用read或者有其他选择吗?关于为什么上述不起作用的小洞察将不胜感激。

编辑:

我想输入要被存储在变量p供以后使用。基本上我希望在heredoc中这样做,即p应该在heredoc内部可用,在heredoc之外是无关紧要的。

+1

只要使用'read',没有'sudo'。 – anishsane

+1

@anishsane:OP在询问如何使用'sudo'。 –

+0

^^这没有任何意义。 (至少我无法理解它。)'read'将修改当前shell中的一个变量。当以'sudo'运行时,它应该产生一个新的进程/新的shell。即使您在该脚本中修改了一个变量,它在后面的脚本中的任何位置都不会有用。 – anishsane

回答

3

这可以帮助:

$ my_tty=`tty` 

$ sudo -s <<EOF 
read -p "Some prompt: " p < $my_tty 
echo "You supplied '\$p'"... #use $p 
EOF 

#Output 
Some prompt: somevalue 
You supplied 'somevalue'... 

然而,正如我已经说过,这$psudo以外的值不可见。

你可以有,而用它喜欢:

$ read -p "Some prompt: " p 
$ sudo -s <<EOF 
echo "You supplied '$p'"... #use $p 
EOF 
+0

'read -p“来使用shell内置函数一些提示:”p <$(tty)'可能是更好的选择... – Jahid

+0

^^试试看...;)好的有用。但有时你可能会得到'不是tty',这取决于你在bash嵌套中有多深... – anishsane

+1

明确地不是''\ $ p''不是那里想要的东西吗?该变量*希望*通过父shell进行扩展。 –

2
sudo -s read p 

你不能使用shell内置命令sudo的,因为须藤不创建壳

+0

ls -l/bin/echo –

+0

当您使用-s指定在shell中运行sudo时。这就是为什么上面的sudo命令提示读取。希望这个澄清 –

+0

你可能需要编辑你想问什么,你想达到什么目的,以便其他人可以提供更好的解决方案 –