从 url 运行 bash 脚本时如何获取用户输入?

dwk*_*kns 1 bash shell command-line curl

考虑这个 bash 脚本:

#!/bin/bash
while true; do
    read -p "Give me an answer ? y/n : " yn
    case $yn in
        [Yy]* ) answer=true ; break;;
        [Nn]* ) answer=false ; break;;
        * ) echo "Please answer yes or no.";;
    esac
  done

if $answer 
  then 
    echo "Doing something as you answered yes"
      else 
    echo "Not doing anything as you answered no" 
fi
Run Code Online (Sandbox Code Playgroud)

从命令行运行时使用:

$ ./script-name.sh
Run Code Online (Sandbox Code Playgroud)

它按预期工作,等待您回答yn的脚本。

但是,当我上传到 url 并尝试使用以下命令运行它时:

$ curl http://path.to/script-name.sh | bash
Run Code Online (Sandbox Code Playgroud)

我陷入了一个永久循环,脚本说Please answer yes or no.显然脚本正在接收yn以外的某种输入。

为什么是这样?更重要的是,如何从从 url 调用的 bash 脚本中获取用户输入?

anu*_*ava 5

你可以像这样运行它:

bash -c "$(curl -s http://path.to/script-name.sh)"
Run Code Online (Sandbox Code Playgroud)

由于您正在向bash解释器提供 bash 脚本的内容。使用curl -s静默执行。