Вопрос или проблема
На centos я могу пропустить слово, нажав ctrl + стрелка (влево или вправо) в терминале. Когда я подключаюсь по ssh к FreeBSD и пытаюсь использовать ту же комбинацию, я получаю:
$ tail -f 20120412.log;5D;5D;5D
(каждую попытку = ;5D)
Существует ли способ это исправить? Я использую Ubuntu 12.04 + Terminator.
Заранее спасибо.
Файл .inputrc
в вашем домашнем каталоге приведет к тому, что ctrl+left перестанет работать на Ubuntu (например).
Чтобы все работало, добавьте следующее в ~/.inputrc
:
# Включить system-wide inputrc, который игнорируется по умолчанию, когда
# у пользователя есть собственный файл .inputrc.
$include /etc/inputrc
Если вы используете ZSH, то используйте это в файле /etc/zshrc.
case "${TERM}" in
cons25*|linux) # обычная консоль BSD/Linux
bindkey '\e[H' beginning-of-line # home
bindkey '\e[F' end-of-line # end
bindkey '\e[5~' delete-char # delete
bindkey '[D' emacs-backward-word # esc left
bindkey '[C' emacs-forward-word # esc right
;;
*rxvt*) # производные от rxvt
bindkey '\e[3~' delete-char # delete
bindkey '\eOc' forward-word # ctrl right
bindkey '\eOd' backward-word # ctrl left
# обходное решение для screen + urxvt
bindkey '\e[7~' beginning-of-line # home
bindkey '\e[8~' end-of-line # end
bindkey '^[[1~' beginning-of-line # home
bindkey '^[[4~' end-of-line # end
;;
*xterm*) # производные от xterm
bindkey '\e[H' beginning-of-line # home
bindkey '\e[F' end-of-line # end
bindkey '\e[3~' delete-char # delete
bindkey '\e[1;5C' forward-word # ctrl right
bindkey '\e[1;5D' backward-word # ctrl left
# обходное решение для screen + xterm
bindkey '\e[1~' beginning-of-line # home
bindkey '\e[4~' end-of-line # end
;;
screen)
bindkey '^[[1~' beginning-of-line # home
bindkey '^[[4~' end-of-line # end
bindkey '\e[3~' delete-char # delete
bindkey '\eOc' forward-word # ctrl right
bindkey '\eOd' backward-word # ctrl left
bindkey '^[[1;5C' forward-word # ctrl right
bindkey '^[[1;5D' backward-word # ctrl left
;;
esac
Если вы не изменяли их по умолчанию, оболочка, которую вы используете на Ubuntu, — это bash. На FreeBSD дефолтная оболочка — csh. Вы можете изменить свою оболочку с помощью следующей команды в обеих ОС:
chsh
Установите оболочку в FreeBSD на /usr/local/bin/bash. Bash не входит в состав FreeBSD, поэтому, если вы ещё этого не сделали, установите его из ports:
cd /usr/ports/shells/bash
make install
make clean
Последнее: не меняйте оболочку для root. Для этого существует учетная запись “toor”: все привилегии root, но вы можете установить оболочку на любую, какую захотите. Причина в том, что нет системных задач, которые выполняются под toor, поэтому вы не сломаете ничего и не запутаете никого, изменив оболочку этой учётной записи на ту, к которой вы привыкли (или может быть более функциональной в качестве логин-оболочки).
Возможно, у вас неправильная настройка $TERM. Введите echo $TERM
, чтобы узнать, что у вас установлено. Возможно, вы захотите использовать xterm, export TERM=xterm-256color
.
Для Ctrl+← и Ctrl+→⃪⃪ с sh(1) в FreeBSD 14.0-RELEASE и более поздних версиях, кажется, что обе комбинации клавиш:
- работают удалённо (ssh)
- пока не работают локально (на компьютере).
Два коммита для улучшения – два файла в дереве src
:
- sh(1): interactive mode improvement · freebsd/freebsd-src@ef0d94a | https://cgit.freebsd.org/src/commit/?h=releng/14.0&id=ef0d94a3d34c880bd9f86cd842ee01b6075bc1d8
- skel: update .shrc as well · freebsd/freebsd-src@5fe9737 | https://cgit.freebsd.org/src/commit/?h=releng/14.0&id=5fe97373486619373e3eeecb25582b5c937a26c5
https://www.freebsd.org/releases/14.0R/relnotes/#userland-config начало:
Оболочка по умолчанию для пользователя root теперь sh(1), которая имеет много новых функций для интерактивного использования. d410b585b6f0
Оболочка, которую вы запускаете на машине FreeBSD, вероятно, не поддерживает эту последовательность команд. Однако без знания, какую оболочку вы используете на каждом из компьютеров, трудно сказать наверняка.
.
Ответ или решение
Когда сбой выполнения команды <kbd>Ctrl</kbd> + <kbd>стрелка</kbd>
в терминале FreeBSD, вы сталкиваетесь с отображением последовательности ;5D
, это вызвано несовпадением терминальных эмуляций или настройками оболочки, которые не поддерживают эти последовательности клавиш. В CentOS, используемом ранее вами, настройки экрана терминала, вероятно, настроены лучше, обеспечивая корректное распознавание данных команд.
Возможные решения проблемы
-
Убедиться в корректной конфигурации оболочки.
- Проверка оболочки FreeBSD: Как правило, по умолчанию используется
csh
. Однако вы можете установитьbash
из портов и переключиться на него:cd /usr/ports/shells/bash make install make clean chsh -s /usr/local/bin/bash
- Использование Zsh для лучших возможностей управления клавишами:
Добавьте конфигурацию в файл/etc/zshrc
:case "${TERM}" in *xterm*) bindkey '\e[1;5C' forward-word # ctrl вправо bindkey '\e[1;5D' backward-word # ctrl влево ;; esac
- Проверка оболочки FreeBSD: Как правило, по умолчанию используется
-
Настройка файла inputrc.
- Если вы используете
bash
, поместите следующую строку в ваш~/.inputrc
:$include /etc/inputrc
Это поможет обеспечить поддержку системных (глобальных) настроек. Убедитесь, что системный файл
/etc/inputrc
также корректно настроен для обработки команд.
- Если вы используете
-
Корректировка переменной среды TERM.
- Проверьте значение переменной
TERM
, которая может влиять на поведение терминала:echo $TERM
- Если значение отличается от
xterm-256color
, измените его командой:export TERM=xterm-256color
- Проверьте значение переменной
-
Обновление оболочки для взаимодействия.
- В последних версиях FreeBSD (например, 14.0-RELEASE) были внесены улучшения в взаимодействие с оболочкой
sh
. Вполне вероятно, что само локальное использование команд близко к ожидаемому, но данная настройка может зависеть от удаленного или локального использования.
- В последних версиях FreeBSD (например, 14.0-RELEASE) были внесены улучшения в взаимодействие с оболочкой
Учтите, что любое изменение конфигурации системы всегда должно сопровождаться проверкой совместимости и тестированием, чтобы убедиться в достижении поставленных целей и избежать неожиданных ошибок. Производя такие настройки, вы добьетесь более грамотного и оптимального взаимодействия с терминалом в FreeBSD, ориентируясь на ваши привычки работы в Ubuntu и CentOS.