在从管道执行的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使读取超时为一秒.其次,此命令不提供提示.这两者的结合可能意味着,即使阅读是短暂地要求输入,你也不知道. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |