加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在从管道执行的bash脚本中使用read -p

发布时间:2020-12-15 21:43:41 所属栏目:安全 来源:网络整理
导读:我提前道歉 – 我并不完全理解我所要求的理念背后的理念,以便理解为什么它不起作用(我不知道我需要学习什么).我首先在堆栈交换中搜索了答案 – 我发现了一些似乎可能相关的信息,但没有充分解释这些概念,我理解如何构建一个可行的解决方案.我一直在谷歌搜索,
我提前道歉 – 我并不完全理解我所要求的理念背后的理念,以便理解为什么它不起作用(我不知道我需要学习什么).我首先在堆栈交换中搜索了答案 – 我发现了一些似乎可能相关的信息,但没有充分解释这些概念,我理解如何构建一个可行的解决方案.我一直在谷歌搜索,但没有找到任何信息,以我理解的方式描述究竟发生了什么.任何可能帮助我了解正在发生的事情的背景概念的方向将非常感激.

是否可以在从管道执行的bash脚本中获取用户输入?

例如:

wget -q -O - http://myscript.sh | bash

并在脚本中:

read -p "Do some action (y/n): " __response
if [[ "$__response" =~ ^[Yy]$]]; then
   echo "Performing some action ..."
fi

据我所知,这不起作用,因为读取stdin和bash脚本的读取尝试当前正在“通过该管道执行”(我确信有一种更技术更准确的方式来描述正在发生的事情,但是我不知道怎么样).

我找到了推荐使用的解决方案:

read -t 1 __response </dev/tty

但是,这也不起作用.

任何关于我需要理解的概念以使其发挥作用的任何亮点,或解释为什么它不起作用或解决方案将不胜感激.

解决方法

tty解决方案有效.使用此代码对其进行测试,例如:

$date | { read -p "Echo date? " r </dev/tty ; [ "$r" = "y" ] && cat || echo OK ; }
Echo date? y
Sat Apr 12 10:51:16 PDT 2014
$date | { read -p "Echo date? " r </dev/tty ; [ "$r" = "y" ] && cat || echo OK ; }
Echo date? n
OK

读取提示出现在终端上,读取等待响应,然后决定是否回显日期.

我上面写的内容与以下两个方面的不同之处有所不同:

read -t 1 __response </dev/tty

首先,选项-t 1使读取超时为一秒.其次,此命令不提供提示.这两者的结合可能意味着,即使阅读是短暂地要求输入,你也不知道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读