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

2023-11-22

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

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

然而,这也行不通。

任何关于我需要理解的概念的阐明或解释为什么它不起作用或解决方案将不胜感激。


The 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 1 gives read一秒超时。其次,该命令不提供提示。这两者的结合可能意味着,尽管read was briefly征求意见,你不知道。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 未找到命令“ember”

    看来我搞砸了 ember cli 安装 我已经使用 sudo 安装了 npm 但是在阅读了 npm 上 ember cli 和 sudo 的一些问题后 我按照此处的说明卸载并重新安装https gist github com isaacs
  • 将“npm run start”的输出写入文件

    我想捕获的输出npm run start在一个文件中 我遇到了大量错误 我想更好地控制如何筛选输出 当我尝试时 npm run start gt log txt 我得到一个非常简短的文件 8 行 其结尾为 34m 39m 90m wdm 3
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 使用 Ansible 将二进制文件添加到 PATH

    我正在尝试安装Kiex https github com taylor kiex版本管理器Elixir http elixir lang org install html使用 Ansible 的编程语言 这些是我为此使用的戏剧 name K
  • 使用 sed 删除非字母数字字符

    我正在尝试验证一些输入以删除一组字符 只允许使用字母数字字符加 句点 下划线 连字符 我测试了正则表达式 w here http gskinner com RegExr http gskinner com RegExr 它与我想要删除的内容
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • 停止从标准输入读取

    我正在用 LInux C 编写一个简单的控制台应用程序 它接受来自命令行的用户输入 我在用std getline std cin std cin gt gt text在一个线程中 10 秒后 我想停止接受控制台输入并写一条短信 然后做其他事
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • 如何制作一个 bash 脚本来同时创建 40 个程序实例?

    我是新来的bash and Linux 我编写了一个程序 我想创建多个同时实例 现在 我通过打开 10 个新终端 然后运行该程序 10 次 我运行的命令是php home calculatedata php 使用 bash 脚本执行此操作的
  • 迭代 bash 脚本中的变量名称

    我需要在一堆文件上运行一个脚本 这些文件的路径被分配给train1 train2 train20 我想 为什么不使用 bash 脚本使其自动执行呢 所以我做了类似的事情 train1 path to first file train2 pa
  • 匹配模式后添加行[重复]

    这个问题在这里已经有答案了 我有一个文件说test具有以下值 Linux Solaris Fedora Ubuntu AIX HPUX 如何在匹配 AIX 的行后面添加一行系统主机名 如果我做 echo hostname gt gt tes
  • 如何判断 Bash 中是否存在文件?

    这会检查文件是否存在 bin bash FILE 1 if f FILE then echo File FILE exists else echo File FILE does not exist fi 我如何只检查文件是否存在not ex
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 如何使用shell脚本从json字符串中grep特定字段值[重复]

    这个问题在这里已经有答案了 下面是文件中可用的 JSON 字符串 我需要从中提取值status在 shell 脚本中 预期输出 status success 响应 json eventDate null dateProccessed nul
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • 获取变量的名称作为输入并使用该名称更改变量

    我从脚本用户那里获取变量的名称作为第一个参数 并将该变量的值回显到控制台 bin bash variablename 1 echo The value of variablename is variablename 这太棒了 我无法开始工作
  • 在 angular2 中过滤数组

    我正在研究如何在 Angular2 中过滤数据数组 我研究过使用自定义管道 但我觉得这不是我想要的 因为它似乎更适合简单的表示转换 而不是过滤大量数据 数组排列如下 getLogs Array

随机推荐

  • 在实体上显式加载多个引用/集合

    考虑以下实体模型 public class Parent public virtual FirstChild FirstChild get set public virtual SecondChild SecondChild get set
  • 如何在 PHP 中启用跨域 POST?

    我正在将 POST 数据从一个站点发送到另一个站点 这两个站点都是由我们开发的 问题是 如果从另一个域请求该页面 则 POST 变量不可用 即使我在本地测试 但指定完整的url POST数据也没有了 所以 这会起作用
  • MediaRecorder 启动错误代码

    我想录制没有声音并可能进行硬件加速的原始 h 264 视频 并稍后进行流式传输 所以我决定使用MediaRecorder 和插座hack用于流式传输 我有以下代码 final MediaRecorder recorder new Media
  • 计算 ArrayList 中单词的出现次数[重复]

    这个问题在这里已经有答案了 我有一个ArrayList具有重复条目的单词 我想计算并保存数据结构中每个单词的出现次数 我该怎么做 如果您没有大量的字符串列表 那么实现它的最短方法是使用Collections frequency方法 像这样
  • 为什么我的程序在内存不足时偶尔会出现段错误而不是抛出 std::bad_alloc?

    我有一个程序 它实现了几种启发式搜索算法和几个领域 旨在通过实验评估各种算法 该程序用C 编写 使用GNU工具链构建 并在64位Ubuntu系统上运行 当我进行实验时 我使用 bashulimit命令限制进程可以使用的虚拟内存量 以便我的测
  • 在 MySQL (InnoDB) 中查找最佳匹配行

    我有以下测试字符串engine mail key和一个看起来像这样的表 query engine engine pdf engine mail 我想找到最匹配的行 最佳匹配由字符串 行开头的最匹配字符指定 我已经构建了一个 RegExp 但
  • 对 Coq 导入感到困惑

    有人可以告诉我之间的区别吗 Require Name Require Import Name Import Name Require 加载外部库 通常来自标准库或user contribs 文件夹 Import 导入模块中的名称 例如 如果
  • 将命令的输出分配给变量(BASH)

    我需要将命令的输出分配给变量 我尝试的命令是 grep UUID fstab awk ext4 print 1 awk print substr 0 6 我尝试用这段代码来分配一个变量 UUID grep UUID fstab awk ex
  • 查找重复文件并删除它们

    我正在编写一个 Python 程序来查找并删除文件夹中的重复文件 我有 mp3 文件和一些其他文件的多个副本 我使用的是sh1算法 如何找到这些重复的文件并删除它们 最快的算法 与接受的答案相比 性能提高了 100 倍 真的 其他解决方案中
  • ARC 下指向 Objective-C 对象的 C 风格指针数组

    我有一个指向 Objective C 实例的 2D 指针数组 用于跟踪地图网格上的游戏对象 现在我正在将代码转换为 ARC Xcode 指出了错误 我知道指向对象的指针不允许作为结构成员 但这让我 几乎 措手不及 我了解 ARC 限制背后的
  • 使用 git 和子模块,什么是好的文件夹结构?

    我将 git 与子模块一起使用 并且我很难弄清楚如何组织我的文件 我使用 PHP 进行开发 并使用单元测试 所以现在 我对每个模块都使用这个组织 src tests 这似乎是一个绝妙的主意 但问题是 当我对项目执行 git submodul
  • 剧作家:从非输入元素上传文件不能使用page.setInputFiles?

    我正在通过 Playwright 上的非输入 HTML 标签上传文件 例如 您可以使用setInputFiles像这样 这有效 await page setInputFiles input type file headphone png 但
  • python中的排序列表

    如果我有一个字符串列表 例如 a143 txt a9 txt 如何按列表中的数字而不是字符串按升序对其进行排序 IE 我想 a9 txt 出现在之前 a143 txt since 9 lt 143 thanks 这就是所谓的 自然排序 从h
  • Owin 如何在 Application_EndRequest 阶段之后设置 Asp.Net 身份验证 cookie?

    作为测试 我使用 Visual Studio 2013 中的最新模板创建了一个新的 Asp Net MVC5 应用程序 我将以下方法添加到 Global asax cs protected void Application PreSendR
  • Azure TopicClient 线程安全吗?

    我一直在处理来自 TopicClient 的大量超时 我认为这可能与对象生存期和处置有关 我正在使用TopicClient班级来自Microsoft ServiceBus Messaging并阅读本文最佳实践指南 states 您不应该在发
  • MYSQL 查询 - 获取与帖子相关的最新评论

    我试图获取与我下载的每篇帖子相关的最新 1 或 2 条评论 有点像 Instagram 的做法 因为它们显示每篇帖子的最新 3 条评论 到目前为止 我正在获取帖子和点赞数 现在我需要做的就是弄清楚如何获取最新的评论 不太确定如何处理它 这就
  • 比较已释放的指针是否会调用 UB?

    这似乎是一种相当常见的模式 例如在 hexchat 中 可能无法编译 另请参阅插件文档 另请注意hexchat plugin get info一直没有被使用 所以为了简单起见我省略了它 static hexchat plugin ph st
  • 如何使用 jQuery 将 Windows 身份验证传递给 Web 服务?

    我使用 jQuery 调用 Net Web 服务 如下所示 var service url https example com myservice asmx ajax type GET url service url dataType xm
  • 如何旋转数据框?

    什么是枢轴 我该如何旋转 长格式到宽格式 我见过很多关于数据透视表的问题 即使他们不知道 写一个几乎是不可能的规范问答这涵盖了旋转的所有方面 但我要尝试一下 现有问题和答案的问题在于 问题通常集中在OP难以概括的细微差别上 以便使用许多现有
  • 在从管道执行的 bash 脚本中使用 read -p

    我提前道歉 我没有完全理解我所要求的背后的想法 无法理解为什么它不起作用 我不知道我需要学什么 我首先在堆栈交换中搜索答案 我发现了一些似乎可能相关的信息 但没有很好地解释这些概念 以至于我无法理解如何构建可行的解决方案 我一直在谷歌上搜索