我正在尝试脚本安装以下内容,如何在命令提示下回答“ y”
wget -O - mic.raspiaudio.com | sudo bash
我已经尝试了平常的方法,但这没用
echo "y" | wget -O - mic.raspiaudio.com | sudo bash
答案 0 :(得分:1)
免责声明:以下解决方案适用于具有非交互式开关的脚本。
我相信echo
不能解决这个问题,因为它没有写入/dev/tty
产生的bash
。您可以使用bash
提供的默认功能来做到这一点。
在手册页中:
-c If the -c option is present, then commands are read from the first
non-option argument command_string. If there are arguments after the
command_string, the first argument is assigned to $0 and any remaining
arguments are assigned to the positional parameters.
如果将-c
选项与bash一起使用,则可以为将要运行的脚本提供args,并将其如手册页中所述放置。例如:
bash -c "script" "arg0" "arg1" ...
。 arg0
将放置在$0
中,而arg1
将放置在$1
中,依此类推。
现在,我不知道这是否可以推广,但是仅当脚本中存在非交互模式时,此解决方案才有效。
如果您看到脚本,它具有以下功能:
FORCE=$1
confirm() {
if [ "$FORCE" == '-y' ]; then
true
else
read -r -p "$1 [y/N] " response < /dev/tty
if [[ $response =~ ^(yes|y|Y)$ ]]; then
true
else
false
fi
fi
}
并用作:
if confirm "Do you wish to continue"
then
echo "You are good to go"
fi
因此,如果我们可以将$ 1设置为“ -y”,则不会要求您进行确认,我们将尝试通过以下方式进行同样的操作:
$ bash -c "$( wget -qO - mic.raspiaudio.com)" "dummy" "-y"
这应该适用于脚本,前提是它没有任何其他交互式选项。我还没有通过自己的最小脚本来测试原始脚本,因此它似乎可以正常工作。例如:
$ bash -c "$(wget -qO - localhost:8080/test.sh)" "dummy" -y
You are good to go
$ bash -c "$(wget -qO - localhost:8080/test.sh)"
Do you wish to continue [y/N] y
You are good to go