我偶然发现内置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
答案 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键。