2016-01-07 3 views
0

Я использую следующий код для интерактивного ввода данных от пользователя, , что позволяет пользователю вносить изменения во входные данные без удаления всей строки.Чтение строк интерактивно в bash

#! /bin/bash 

while : 
do 
    echo -n "prompt# " 
    read -e input 
done 

Проблема:

Это также позволяет мне удалить «быстрое #», который я не хочу, чтобы это произошло. Я не хочу, чтобы «приглашение #» было удалено пользователем в любом случае. Я пробовал использовать различные опции в команде read, но не могу понять это. Как я могу это достичь?

Edit:
Последовательность событий, которые привели к этой проблеме:
1. Я побежал выше сценарий и поступил «привет».
2. Затем я переместил курсор на «e» в «hello» и «нажал и удерживал» backspace в течение некоторого времени, что привело к удалению «prompt #»
3. Если вы не наберете никаких символов он работает отлично, и приглашение не удаляется, но если вы введете даже пробел или любой символ, а затем нажмите обратное пространство, то оно беспорядочно вызывает приглашение.

Посмотрите снимок ниже.
Снимок bash readline prompt deletion:

+5

Вы должны использовать встроенную подсказку 'read', или вы сами. 'read -p 'prompt #' -e input'. – 4ae1e1

+0

@ 4ae1e1: Это именно то, что я хотел. Большое спасибо .... –

+1

@ 4ae1e1 - сделайте это ответом! – ghoti

ответ

2

Из комментария 4ae1e1 в:

Вы должны использовать прочитаете встроенную оперативную поддержку, или вы по своему усмотрению.

read -p 'prompt# ' -e input 
+0

Отключить тему: несколько раз некоторые пользователи отправляют ответ в виде комментария, а затем забывают об этом. Но вопрос не закрывается, потому что ответа нет. И я не хочу красть кредит этого пользователя. Итак, обозначение его как вики сообщества - хорошая идея. – anishsane