使用bash自动安装脚本

时间:2019-12-08 12:27:06

标签: linux bash

我正在尝试脚本安装以下内容,如何在命令提示下回答“ y”

 wget -O - mic.raspiaudio.com | sudo bash

我已经尝试了平常的方法,但这没用

echo "y" |  wget -O - mic.raspiaudio.com | sudo bash

1 个答案:

答案 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