首页 > 解决方案 > 如何在不调用 bash 的情况下从标准输入读取单个字符?

问题描述

我正在尝试从 shell 脚本(不是 bash 脚本)中的标准输入读取单个字符。

我有一个包含以下行的脚本:

#!/bin/sh

…

char=$(/bin/bash -c 'read -s -n1 key; echo "$key"')

…

这行得通(假设安装了 bash),但是拥有那行代码感觉有点不对。

有没有更好更便携的方法来做到这一点?


它应该可以跨平台工作,但即使我在少数几个平台上测试过它(debian、maemo、cygwin、fedora),如果没有安装 bash 并调用 bash 实例只是为了阅读一个,我也找不到一种方法击键。

我也尝试过char="$(dd bs=1 count=1)",但 dd 仅在换行符/EOF 后返回/退出。


复制

这个问题的答案适用于我的问题。

这可能不是完全重复的,因为:

  1. 这个问题只与ksh有关。
  2. 投票最多的答案只是重复我的问题:“如何用 bash 来做”

但它被问和回答了,因为例外最佳答案都可以跨平台工作。我命名为“最佳”的答案做得更好;)

标签: bashshellposixstdindd

解决方案


推荐阅读