LINUX.ORG.RU

.sh/Line wrap while read() in variable

 , ,


0

2

В .sh скрипте читаю вводимое с клавиатуры в переменную используя read. Вводимое — есть строка без каких-либо выкрутасов/спецсимволов, все в пределах ASCII-core.

Отлично, но, окно эмулятора терминала обычно имеет конечную ширину и часто длинна вводимой строки превышает ее (> COLUMNS). Полагаю, дальнейшее поведение зависит от конфигурации bashrc/используемого эмулятора/от чего - нибудь еще. Например, у меня это перерисовка уже введенного с символом ‘>’ и продолжением ввода (urxvt), вернуться к веденному ранее можно перемещая курсор. В этом случае теряется возможность наблюдать то что было введено ранее (без лишних телодвижений и всегда), хотелось бы наблюдать все сразу перед глазами пока ввод не завершен. Можно ли осуществить перевод строки ?

Так как скрипт планируется к использованию не только мной и не только с urxvt, можно ли при этом не трогать конфигурационные файлы и осуществить все в рамках этого скрипта (размер окна всегда одинаков, устанавливается скриптом) ?


Если выводиться такая длинная строка, то может быть стоит попробовать другой подход - как это делают crontab -e и visido - вызвать $EDITOR с временным файлом?

legolegs ★★★★★ ()

В этом случае теряется возможность наблюдать то что было введено ранее

При дефолтных настройках так быть не должно, длинный текст должен переноситься на следующую строку. Очень похоже на кастомные промпты (PS1-PS4). Тут возможно два варианта:

  • переопределять PS* самостоятельно внутри скрипта;
  • забить и оставить на совести пользователя, возможно, ему так нравится.
E ★★★ ()
Ответ на: комментарий от exfx

^x^e

Похоже на управляющие символы, передал их как параметры -xe в bash, тот начал быть более информативным в плане отладки, да и все (судя по man set). Или имеется в виду что - то иное ?

oOoOo ()
Ответ на: комментарий от legolegs

Ваше решение видится наиболее логичным и правильным на самом деле, но мы простых путей не ищем…

read можно заставить читать n символов, что если делать это в цикле, выводя уже заполненную строку с переводом каретки на новую (read -p) или вообще прямо в переменную фигачить аппенд с ‘\n’ а потом их отбрасывать.

В общем, просто не выкрутиться, жалко, будет время займусь.

Спасибо за ответы, схоронил.

oOoOo ()
Ответ на: комментарий от exfx

Зашел в тред написать єтот комментарий.

ТС: попробуй в терминале нажат ctrl+x ctrl+e єто откроет программу с переменной EDITOR и позволит ввести все в одном окне. При закрітии редактора команда автоматически віполнится.

Удобно в тому числе для команд, где много параметров.

PunkoIvan ★★★ ()