bash 内置命令“select”无法通过 shell 脚本中的管道工作

2024-03-19

我使用bash内置命令编写了一个shell脚本select创建选择菜单。调用时效果很好bash直接地。但如果我使用管道|例如cat script.sh | bash, the select功能将无法工作。

例如,代码片段显示

#!/usr/bin/env bash

arr=("Red Hat" "SUSE" "Debian")
PS3="Choose distribution:"

result=${result:-}

select item in "${arr[@]}"; do
    result="${item}"
    [[ -n "${result}" ]] && break    
done

echo "Result is ${result}"
unset PS3

直接使用bash script.sh, 效果很好。

$ bash /tmp/test.sh 
1) Red Hat
2) SUSE
3) Debian
Choose distribution:1
Result is Red Hat

使用管道|,它会输出

$ cat /tmp/test.sh | bash
1) Red Hat
2) SUSE
3) Debian
Choose distribution:1) Red Hat
2) SUSE
3) Debian
Choose distribution:Choose distribution:Choose distribution:

这使得脚本无法工作。

我不知道为什么?做select不支持管道|或者其他什么?


select从标准输入读取。stdin来自管道。如果你想从tty获取数据,你可以尝试:

#!/usr/bin/env bash

arr=("Red Hat" "SUSE" "Debian")
PS3="Choose distribution:"

result=${result:-}

select item in "${arr[@]}"; do
    result="${item}"
    [[ -n "${result}" ]] && break    
done < /dev/tty                      #  <------------------

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

bash 内置命令“select”无法通过 shell 脚本中的管道工作 的相关文章

  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • 迭代 bash 脚本中的变量名称

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

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • codeigniter,获取mysql表列中的最大值

    我正在使用 codeigniter 2 我有一个 mysql 表列 存储每个学生所用的时间 例如 1 2327 0 6547 1 9876 我想获得最大值 值该列 这是我的代码 this gt db gt select max time t
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • jquery-traversing:选择 -> 选项 -> 文本

    我想将变量与选择 gt 选项 gt 选择的文本进行比较 以更改 选定 属性 这是我的代码 它有效 但我认为这不是最好的编写方式 请原谅我的英语 我使用谷歌翻译寻求帮助嘿嘿嘿 var lista example 1 id option eac
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • chrome 中选择选项元素的额外填充

    我有一个选择元素 用户可以在其中选择分类和描述 仅在 Chrome 浏览器中 我有一个额外的填充 无法使用 padding 0 或其他 css 标签删除它 Chrome 的屏幕 https i stack imgur com m3iIb p
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的

随机推荐

  • ASP.Net 中的图表助手显示日期时间

    在 asp net mvc 应用程序中 我需要创建一个简单的折线图 所以我尝试了图表助手 该图表是使用两个列表创建的 x 轴应显示日期时间 y 轴应显示每个时间的值 现在使用下面的代码可以正常工作 listOfDateTimes 包含日期时
  • 当应用程序通过 gradle run 启动时,java.util.scanner 抛出 NoSuchElementException

    我创建了一个简单的 java echo 应用程序 它接受用户的输入并将其显示给他们以演示问题 我可以使用 IntelliJ 的内部 运行 命令毫无问题地运行该应用程序 并且在执行由gradle build 但是 如果我尝试使用执行应用程序g
  • 哪些递归函数不能使用循环重写? [复制]

    这个问题在这里已经有答案了 据我所知 大多数递归函数都可以使用循环重写 有些可能比其他的更难 但大多数都可以重写 在什么条件下不可能使用循环重写递归函数 如果存在这种条件 当您递归地使用函数时 编译器会为您处理堆栈管理 这使得递归成为可能
  • UIViewController 在 vi​​ewWillAppear 和 viewDidAppear 之间调整自身大小?

    我的项目中有一个非常奇怪的错误 我有一个UIScrollView作为我的主要观点 在它里面 我有一个UIViewController not UITableViewController 其中有一个UITableView实例变量 以及一些杂项
  • Wordpress 中的登录用户列表?

    是否可以获取 WordPress 中登录用户的列表 是的 有一个插件 WP OnlineUsers 您可以在这里找到这个插件 http lesterchan net portfolio programming php http lester
  • cassandra 中的行何时被覆盖

    我的理解是 当插入具有相同主键的另一行时 行将被覆盖 例如 我有专栏 user id int item id int site id int 和我的PRIMARY KEY user id item id 如果我有下表 user id ite
  • 获取手机类型

    当手机使用 PHP 连接到 mobi 网站时 有没有办法获取手机的类型 您可以使用 PHP 阅读用户代理 这可能会给您提供线索 http Detectmobilebrowsers mobi http detectmobilebrowsers
  • 非法字符错误:'\u200b'

    我正在面向对象编程课程中为小行星游戏制作小行星场 但收到非法字符错误 u200b 该问题似乎发生在第 12 行 import java awt Point 和 public class Asteroid extends PolyBlob 之
  • 回到 Rails

    因此 在离开几年后 我决定重新使用 Ruby on Rails 来完成我的一些个人项目 我想知道什么是了解 Rails 新功能的最佳资源 自从 1 2 发布以来 我什至还没有真正接触过 Rails 哦 是的 TextMate 仍然是 Mac
  • 如何替换字符串中的奇怪模式?

    我正在用 SQL 创建一个临时过程 因为我有一个用 markdown 编写的表的值 因此它在 Web 浏览器中显示为呈现的 HTML Markdown 到 HTML 的转换 该列的字符串当前如下所示 Questions about gene
  • 如何修复“App Store 连接操作错误 ITMS-90771”

    我正在尝试将我的应用程序提交到 TestFlight 但我不断收到此错误 这就是我的info plist 我该如何解决 将其添加到您的 info plist 中 然后重新提交您的应用程序
  • 为什么“element.innerHTML=”是错误的代码?

    我被告知不要使用附加内容element innerHTML 像这样 var str div hello world div var elm document getElementById targetID elm innerHTML str
  • kafka AdminClient API等待节点分配超时

    我是卡夫卡的新手 正在尝试使用AdminClient用于管理在我的本地计算机上运行的 Kafka 服务器的 API 我的设置与中完全相同快速开始 http kafka apache org quickstartKafka 文档的部分 唯一的
  • 使用 NSArrayController 分段 NSTableView

    我正在尝试创建一个分段NSTableView using NSArrayController和可可绑定 我正在寻找类似的方法 例如NSFetchedResultsController在 iOS 中 您可以在其中设置部分键路径 我想做一些类似
  • 在 cakephp 中使用本地化

    如何本地化 cakePhp 中的字符串 我在在线文档方面没有取得任何成功 谢谢你的帮助 有几个步骤 首先 设置要使用的区域设置 创建一个或多个 po该语言的文件 将所有支持 l10n 的字符串包裹起来 or d 辅助方法 以下是我的一个项目
  • 自适应卡:如何创建 6 列的表格而不截断文本?

    我创建了一张自适应卡来显示为表格 但是 文本被截断了 就像Today I 代替Today In Count完整的文本 此自适应卡适用于 Microsoft Teams 自适应卡 schema http adaptivecards io sc
  • blockUI 与 ajax 的异步选项为 false

    我需要调用一个 javascript 函数来返回 ajax 调用的内容 为了达到这个结果 我在 ajax 调用中将 async 选项设置为 false function ajaxQuery var content ajax url blab
  • 使用 DbConnection 执行存储过程

    我需要在数据库上执行存储过程 这是我到目前为止所得到的有效方法 protected DbProviderFactory dbProviderFactory this dbProviderFactory DalFactory GetFacto
  • Common Lisp 重新启动到条件绑定

    我在空闲时间学习 Common Lisp 并对条件系统有疑问 当我们在 common lisp 中处理错误时 我们在处理程序中指定错误类型来确定要处理哪个错误 在引发和处理错误之间 我可以进行一些重新启动 例如使用 restart case
  • bash 内置命令“select”无法通过 shell 脚本中的管道工作

    我使用bash内置命令编写了一个shell脚本select创建选择菜单 调用时效果很好bash直接地 但如果我使用管道 例如cat script sh bash the select功能将无法工作 例如 代码片段显示 usr bin env