从URL运行bash脚本时如何获得用户输入?

时间:2014-11-11 19:14:24

标签: bash shell curl command-line

考虑这个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

使用以下命令从命令行运行时

$ ./script-name.sh

正如预期的那样,脚本等待您回答 y n

但是当我上传到网址并尝试使用以下网址运行时

$ curl http://path.to/script-name.sh | bash

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

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

1 个答案:

答案 0 :(得分:4)

您可以像这样运行:

bash -c "$(curl -s http://path.to/script-name.sh)"

因为您要向bash解释器提供bash脚本的内容。使用curl -s进行静默执行。