bash 脚本 - 读取单个击键,包括特殊键 Enter 和空格

2023-11-22

不确定我是否应该将其放在 stackoverflow 或 unix.stackexchange 上,但我发现了一些similar 问题在这里,就这样吧。

我正在尝试创建一个由 .bashrc 调用的脚本,该脚本允许我根据一次击键选择两个选项之一。通常这并不难,但我希望与两个选项相对应的两个键是空格和回车。

这是我到目前为止得到的:

#!/bin/bash

SELECT=""
while [[ "$SELECT" != $'\x0a' && "$SELECT" != $'\x20' ]]; do
    echo "Select session type:"
    echo "Press <Enter> to do foo"
    echo "Press <Space> to do bar"
    read -s -N 1 SELECT
    echo "Debug/$SELECT/${#SELECT}"
    [[ "$SELECT" == $'\x0a' ]] && echo "enter" # do foo
    [[ "$SELECT" == $'\x20' ]] && echo "space" # do bar
done

如果我按 Enter、空格、退格键和 x,将得到以下输出:

:~$ bin/sessionSelect.sh
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//0
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//0
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//1
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug/x/1

因此,输入和空格都会导致空的 SELECT。没有办法区分两者。我尝试将 -d 'D' 添加到读取选项,但这没有帮助。也许有人可以指出我正确的方向。

顺便说一句,bash 版本是 4.2。


尝试将读取分隔符设置为空字符串,然后检查内置 $REPLY 变量:

read -d'' -s -n1

由于某种原因,我无法让它工作指定变量。

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

bash 脚本 - 读取单个击键,包括特殊键 Enter 和空格 的相关文章

  • 文本处理问题:删除其中一列不包含特定值的行

    我有一个制表符分隔的文件 如下所示 input sequence match sequence score receptor group epitope antigen organism ASRPPGGVNEQF ASRPPGGVNEQF
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • 设置 Apache POI 的路径

    我想创建 Excel 文件并使用 java 程序在该文件中写入数据 That is here http www techbrainwave com p 554我在 java 文件所在的位置提取了 Apache POI 并将该路径包含在路径变
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 在 Fish Shell 中设置导出

    我安装了多个版本的 PHP 对于我的正常开发 我总是使用通过自制程序安装的 PHP 5 5 x 在鱼壳里 which php php version gt usr local bin php gt PHP 5 5 8 cli built J
  • SQLite FTS4 使用特殊字符进行搜索

    我有一个 Android 应用程序 它使用 FTS4 虚拟表在 SQLite 数据库中搜索数据 它工作正常 但是当表中的数据包含特殊字符 如 或 时 SQLite MATCH 函数不会给出任何结果 我现在迷路了 谢谢 注意 默认的分词器真的
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 如何将设备屏幕位置转换为发送事件位置?

    我知道关于input tap x yshell 命令 但是 我想了解如何 使用执行单击sendevent命令 我能够通过以下命令实现它 sendevent dev input event5 3 53 X sendevent dev inpu
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • shell_exec 的输出被截断为 100 个字符

    当在 shell 中运行以下命令时 curl F file filename http 192 168 0 1 产生以下输出 Accuracy 0 0 1 classification Accuracy 0 0 1 classificati
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 使用带有curl 的内部字段分隔符

    当我做 ls IFS l 我得到了我期望的输出 当我做 curl IFShttp www google com 我不 我是否误解了内部字段分隔符 如何在不使用任何空格字符的情况下运行curl 命令 您需要将变量放在大括号内 否则 shell
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue

随机推荐

  • 如何在服务器上安全地存储文件

    我在做什么 我基本上需要创建一个由用 PHP 编写的登录页面保护的网站 一旦登录 您就会有一个读取整数的搜索栏 并将数据发送到 PHP 脚本 该脚本检索以数字作为名称的图像 我将在此服务器上存储数千张图像以供搜索 库存图像 我需要什么帮助
  • Windows 窗体 Web 浏览器控制缩放级别

    我正在使用 Web 浏览器控件在我的应用程序中显示一些动态生成的 HTML 文档 问题是 在我的机器上 文档显示有点放大 在其他同事的计算机上 一切看起来 正常 它必须是某种本地设置 但我找不到在哪里更改它 我可以按 CTRL 滚轮进行缩小
  • 什么叫“进口”?

    它不是一个陈述 也不是一个表达 那叫什么呢 指令 宣言 See also JLS 7 5 Import Declaration 7 5 1 单一类型导入声明 7 5 2 类型按需导入声明 7 5 3 单一静态导入声明 7 5 4 静态按需导
  • 为什么 Django 的 DetailView 没有可重用的模板?

    在 Django 中 在模板中显示表单相当简单
  • 如何在discord.js中通过ID查找用户

    我希望我的机器人能够为使用其 ID 声明的特定用户赋予特定角色 我试过 const user bot users cache get args 2 user roles add role ID 你在这里遇到的问题是你得到了一个User对象而
  • HTML Canvas:同时绘制多个 getContext

    我正在使用 websockets 构建一个工具 该工具允许多个用户在彼此的画布上 绘图 用户在画布上绘图 包含 mousedown mouseup 事件和坐标的对象会立即推送给其他用户 然后将其绘制在他们的画布上 这给出了多个用户在同一个地
  • hidesBottomBarWhenPushed 在 iOS 7 中被忽略

    这段代码在 iOS 7 发布之前一直运行良好 我正在分配一个UIViewController with hidesBottomBarWhenPushed as YES 作为rootViewController of an UINavigat
  • 部署 ASP.NET 网站并更新 MSSQL 数据库,零停机时间

    我对 ASP NET 网站和 MSSQL 数据库部署有疑问 我们正在托管 ASP NET 网站并开发了新版本 一些 ASP NET 文件已更改 数据库也进行了一些修改 在不停机的情况下上传新版本网站和升级 MSSQL 数据库的最佳理由是什么
  • 编程错误-sqlalchemy-on_conflict_do_update

    按照此question 正如 Ilja Everil 在他的书中提到的answer 我创建了一个表对象 from sqlalchemy import metadata MetaData idTagTable Table id tag met
  • 如何传递 Terraform S3 后端资源的变量?

    terraform backend s3 bucket mybucket key path to my key region us east 1 是否无法通过变量文件为上面的存储桶和键提供值 因为当我尝试这样做时 terraform bac
  • 使用Python for循环更改变量名称[重复]

    这个问题在这里已经有答案了 我只是想知道是否有人知道一种基于 for 循环更改变量名称的方法 如下所示 for i in range 3 group i self getGroup selected header i 以便更改变量名称以适应
  • PL/SQL 在 IN CLAUSE 中使用 VARRAY

    是否可以在 pl sql 的 IN CLAUSE 中使用 VARRAY 是的 可以 前提是 VARRAY 类型是全局类型 并且对于某些 PL SQL 代码来说不是本地类型 CREATE OR REPLACE TYPE str tab typ
  • 如何安装.tar.bz2文件

    我是 Linux 新手 正在使用 Ubuntu 正在尝试安装firefox 4 0b1 tar bz2但不知道如何从命令行安装它 我怎么能这样做呢 在 macOS 上 一些安装程序类似于 xxxxx bz2 要安装此类安装程序 您只需将扩展
  • 将 Html 渲染或转换为“格式化”文本 (.NET)

    我正在将一些数据从另一个测试 错误跟踪工具导入到 tfs 中 并且我想转换它的描述 它是简单的 HTML 所以是一个纯字符串 其中保留了 HTML 的 布局 例如 ol li Log on with user Acme amp Co li
  • 你能将 HTTPS 功能添加到 python Flask Web 服务器吗?

    我正在尝试构建一个 Web 界面来模拟网络设备上的静态接口 该网络设备使用摘要式身份验证和 HTTPS 我想出了如何将摘要式身份验证集成到 Web 服务器中 但我似乎无法找到如何使用 FLASK 获取 https 如果您可以向我展示如何实现
  • 如何中断 IMAP 的 IDLE?

    我正在使用 Javamail API 连接到我的 IMAP 服务器 javax mail Folder idle 的一切工作都很好method 当新邮件进来时 我的监听器会被呼叫 但是问题是永远空闲块 我该如何中断它 如何在不终止 Java
  • Hibernate 4.3.0.Final 和 Spring Data JPA 1.4.3.RELEASE

    我第一次尝试设置和使用 Spring Data 当然 您会想使用最新版本 Spring Data JPA 1 4 3 RELEASE Hibernate 4 3 0 Final 按照在线示例配置后 应用程序抛出异常
  • PHP 上传 - 为什么 isset($_POST['submit']) 总是 FALSE

    我有以下代码示例 upload3 php
  • .NET SSH 端口转发

    我正在尝试将 SSH 端口转发构建到我正在编写的 NET 应用程序中 我尝试过使用sharpSSH 但它要求用户每次都输入密码 而我不希望这样 我将处理存储密码的问题 我已经下载了Granados 但它的文档基本上为零 如何使用 Grana
  • bash 脚本 - 读取单个击键,包括特殊键 Enter 和空格

    不确定我是否应该将其放在 stackoverflow 或 unix stackexchange 上 但我发现了一些similar 问题在这里 就这样吧 我正在尝试创建一个由 bashrc 调用的脚本 该脚本允许我根据一次击键选择两个选项之一