gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:05:05 25 4
gpt4 key购买 nike

我提前道歉 - 我没有完全理解我所提出的问题背后的想法,无法理解为什么它不起作用(我不知道我需要学习什么)。我首先在堆栈交换中搜索答案——我发现了一些看起来可能相关的信息,但没有很好地解释这些概念,以至于我无法理解如何构建一个可行的解决方案。我一直在搜索谷歌,但没有找到任何信息以我理解的方式准确描述正在发生的事情。任何可以帮助我理解正在发生的事情的背景概念的方向将不胜感激。

是否可以在从管道执行的 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

据我所知,这是行不通的,因为 read 尝试从 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 的提示出现在终端上,read 在决定是否回显日期之前等待响应。

我上面写的与下面这行在两个关键方面不同:

read -t 1 __response </dev/tty

首先,选项-t 1read 提供一秒的超时时间。其次,该命令不提供提示。这两者的结合可能意味着,即使 read 短暂地 请求输入,您也不知道。

关于bash - 在从管道执行的 bash 脚本中使用 read -p,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23033880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com