如果脚本通过管道传输到less,则内置的bash read不会回显输入

时间:2018-11-21 14:19:18

标签: bash pipe

我偶然发现内置bash的这种奇怪行为。 我有一个交互式脚本,它有可能产生较大的输出。因此,很自然地您将| less附加到了它。 该脚本仍会要求您输入,但不会回显您键入的内容。

这是一个小样本。sh:

#!/bin/bash

echo "Type:"
read -r input

echo "Typed: ${input}"

sample.sh | less

我注意到这不是管道的普遍问题(例如|cat可行)。

任何线索将不胜感激。

一个对我有用的解决方案

#!/bin/bash

STTY_ORIG="$(stty -g)"  # save stty settings
stty echo  # enable echo

echo "Type:"
read -e -r input  # use readline (backspace will not work otherwise)

echo "Typed: ${input}"

stty "${STTY_ORIG}"  # restore stty settings

2 个答案:

答案 0 :(得分:0)

一个对我有用的解决方案,并且没有副作用。 基本上只是调整并恢复终端设置...

#!/bin/bash

STTY_ORIG="$(stty -g)"  # save stty settings
stty echo  # enable echo

echo "Type:"
read -e -r input  # use readline (backspace will not work otherwise)

echo "Typed: ${input}"

stty "${STTY_ORIG}"  # restore stty settings

答案 1 :(得分:-1)

它实际上对我有用。

相同的脚本

martus@makus-pc:/tmp/src$ dpkg -l | grep bash
ii  bash   4.4-5   amd64   GNU Bourne Again SHell

martus@makus-pc:/tmp/src$ uname -a
Linux makus-pc 4.9.0-4-amd64 #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23) x86_64 GNU/Linux

编辑:脚本在不减少管道的情况下是否可以正常工作?少输入任何内容,直到您按Enter键。