Вопрос или проблема
Я подключаюсь к серверу Slackware. Когда команда длиннее размера окна putty, строка продолжается на той же линии, и начало команды исчезает, когда я продолжаю добавлять к той же команде, просто добавляя «<» в начале строки.
Когда я работаю на сервере Red Hat, я могу видеть всю команду, потому что консоль просто добавляет строки по мере необходимости.
Я не знаю, где включить перенос слов. Где я могу настроить сервер Slackware, чтобы он перенёс слова, как это делает мой сервер Red Hat?
P.S.: Извините за мой английский.
Это может быть связано с тем, что вы используете bash
(или другой терминал, который использует readline), и в вашем ~/.inputrc
(или глобальном /etc/inputrc
) у вас есть
set horizontal-scroll-mode On
Из man readline
:
horizontal-scroll-mode
(Off
)
Когда установлено вOn
, заставляет readline использовать одну строку для отображения, прокручивая ввод по горизонтали на одной строке экрана, когда он становится длиннее ширины экрана, вместо того чтобы оборачивать на новую строку.
Решение: удалите строку (по умолчанию параметр Off
) или явно установите параметр в Off
:
set horizontal-scroll-mode Off
Readline использует /etc/inputrc
только если ~/.inputrc
не существует или не может быть прочитан (~/.inputrc
также может $include /etc/inputrc
), так что даже если там On
в /etc/inputrc
и вы не можете или не хотите его изменить, вы всегда можете переопределить настройку, отредактировав ~/.inputrc
.
Изменение автоматически не повлияет на уже работающие оболочки. Вы можете перезагрузить конфиг, используя
bind -f ~/.inputrc
(см. это), или измените только этот параметр, используя
bind 'set horizontal-scroll-mode off'
Библиотека readline также вернётся к horizontal-scroll-mode
, если переменная окружения TERM
установлена в имя терминала, которого нет в базе данных terminfo; вы можете проверить, так ли это, с помощью команды infocmp
. Смотрите здесь, чтобы узнать, как вы можете исправить ситуацию.
Похожий интерфейс (но отображающий знак <
в правом конце строки) используется в некоторых оболочках, производных от pdksh, которые не используют readline (в частности, mksh
, по умолчанию в Android). В этом случае нет возможного обходного пути.
Ответ или решение
Чтобы настроить оболочку на перенос слов для длинных команд на сервере Slackware, следуйте рекомендациям, основанным на использовании библиотеки Readline. Основная проблема, с которой вы сталкиваетесь, связана с настройками режима горизонтальной прокрутки, которые нужно изменить. Вот подробное руководство:
Проблема с режимом горизонтальной прокрутки
При выполнении команды, которая длиннее ширины окна терминала, Readline может переключаться на режим горизонтальной прокрутки, из-за чего строиться только одна строка и прокручивается текст, вместо того чтобы переноситься на новую строку, когда это необходимо.
Решение проблемы
-
Проверка и редактирование конфигураций Readline:
-
Конфигурационный файл пользователя
~/.inputrc
: Убедитесь, что в этом файле отсутствует строкаset horizontal-scroll-mode On
. Если она есть, удалите её или измените наset horizontal-scroll-mode Off
. -
Глобальный конфигурационный файл
/etc/inputrc
: Если в вашем пользовательском файле нет указанных настроек, это может быть настроено в глобальном файле. В случае необходимости изменения этого файла, если нет доступа к редактированию, создайте или измените файл~/.inputrc
и добавьте строкуset horizontal-scroll-mode Off
.
-
-
Перезапуск конфигурации Readline:
- Вы можете применить изменения без перезапуска оболочки, выполнив команду:
bind -f ~/.inputrc
или изменить настройку в текущем сеансе терминала с помощью:
bind 'set horizontal-scroll-mode off'
- Вы можете применить изменения без перезапуска оболочки, выполнив команду:
-
Проверка переменной TERM:
Иногда Readline переходит в режим горизонтальной прокрутки, если переменная среды
TERM
указывает на терминал, отсутствующий в базе данных terminfo. Для проверки используйте команду:infocmp
Убедитесь, что терминал правильно настроен в вашем программном обеспечении (например, PuTTY).
Дополнительные проблемы
Имейте в виду, что некоторые интерпретаторы команд, такие как mksh
, не используют библиотеку Readline и представляют текст с символом <
, если вы используете их, альтернативных решений нет.
Следуя этим рекомендациям, вы настроите вашу оболочку Slackware так, чтобы она обрабатывала длинные команды так же, как это происходит на вашем сервере Red Hat. Удачи в настройке!