Встроенная функция чтения bash не отображает ввод, если сценарий передается меньше - PullRequest
0 голосов
/ 21 ноября 2018

Я наткнулся на это странное поведение встроенного чтения bash.У меня есть интерактивный скрипт, который может генерировать большой результат.Поэтому, естественно, вы добавляете | less к нему.Скрипт по-прежнему будет запрашивать ваш ввод, но не будет отображать то, что вы набрали.

Вот небольшой пример .sh:

#!/bin/bash

echo "Type:"
read -r input

echo "Typed: ${input}"

sample.sh | less

Я заметил, что это не общая проблема с трубами (например, |cat работает).

Любая подсказка будет оценена.

A РЕШЕНИЕ , которое работает для меня:

#!/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 голосов
/ 08 декабря 2018

РЕШЕНИЕ, которое работает для меня и не имеет побочных эффектов.В основном просто настроить и восстановить настройки терминала ...

#!/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 голосов
/ 21 ноября 2018

Это действительно работает для меня.

Тот же сценарий

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.

...