Перенос строк в Bash не работает на последовательном терминале, таком как Minicom - PullRequest
0 голосов
/ 10 октября 2018

У меня есть встроенная система Linux с BusyBox.BusyBox поставляется с ash в качестве оболочки по умолчанию, но мне нужны дополнительные функции, поэтому я хочу установить bash.

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

например: я пишу:

aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb

Я получаю:

bbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb

Вместо:

aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb
bbbbbbbb

Замечу, чтоКоманда все еще работает.Это означает, что разрушен только дисплей.Оболочка по умолчанию (ash) знает, как справиться с этой ситуацией.

Я посмотрел на проблему и изучил двоичный файл, который оболочка создает в последовательном порту, когда он достигает конца строки, и это делаеттолько отправить \ r и нет \ n (пепел отправляет \ r \ r \ n, и поэтому он работает хорошо).

Если я подключаюсь к устройству из Ubuntu через ssh и использую оболочку bash, это работает хорошо.Я предполагаю, что это потому, что терминал Ubuntu заботится о порядке строк.

Дополнительные вещи, которые я протестировал:

  • Я видел много сообщений, в которых говорится, что подобные вещи могут происходить из-за моей переменной PS1.Я попытался изменить его и даже просто вставить один символ ($) без специальных или непечатных символов, и проблема не устранена.

  • Я попытался настроить системную переменную $ TERM, которая используется bash (по умолчанию vt102, и я изменил ее на xterm), это не имело никакого значения.

  • Я попытался возиться с системной переменной $ COLUMNS и изменить ее значение, и bash реагирует на это изменение.Единственная проблема заключается в том, что когда он распознает, ему нужно перейти на следующую строку, он производит \ r вместо \ n.

Есть ли способ решить эту проблему?Может быть, какая-нибудь системная переменная, которая сообщает bash, какую строку писать при переходе на следующую строку?Или, может быть, флаг, который я могу изменить при компиляции bash?

Спасибо.

1 Ответ

0 голосов
/ 10 октября 2018

Простой способ обойти это - использовать терминал шириной ровно 80 символов.

Здесь также может помочь команда «resize» (которая обычно поставляется с пакетом «xterm») - после того, как она выполняется внутри сессии,Связанное с переводом строки поведение командной строки должно стать лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...