Клавиши со стрелками, Home, End, Tab-Complete не работают в оболочке

Я установил Ubuntu Minimal(Mini.ISO) на мой виртуальный компьютер. Затем я использовал режим восстановления, чтобы войти в систему как root и создать учетную запись с useradd -m admin а затем установить пароль с passwd admin,

Когда я вхожу в новую учетную запись, вместо обычной подсказки я вижу только $ знак. Если я пытаюсь завершить табуляцию команды или имени файла, она печатает обычную вкладку. Если я пытаюсь использовать клавиши со стрелками, он печатает ^[[A, ^[[B, ^[[C или же ^[[D, Также, ls больше не добавляет цвета.

Ни одна из этих проблем не была в режиме восстановления. Как я могу это исправить?

9 ответов

Решение

Это, вероятно, означает, что новая учетная запись пользователя была создана с / bin / sh в качестве оболочки входа в систему (которая по умолчанию является символической ссылкой на оболочку dash) вместо /bin/bash - вы можете изменить оболочку входа пользователя с помощью команды 'chsh'

sudo chsh -s /bin/bash <username>

(чтобы изменения вступили в силу, вам необходимо выйти из системы и снова войти в нее). Вам также может понадобиться скопировать файл по умолчанию.bashrc из /etc/skel, чтобы получить подсказку цвета.

В будущем вы можете захотеть использовать команду 'adduser' вместо 'useradd' - она ​​устанавливает более полную пользовательскую среду, включая такие вещи, как.profile и.bashrc по умолчанию, а также устанавливает оболочку входа в систему 'bash'

Мне не удалось использовать завершение табуляции при подключении через VNC к безголовому XFCE4. Ответ, указанный здесь, не сработал, но это сработало:

Изменить сочетания клавиш в файле XML:

sudo nano ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml

Найти:

<property name="&lt;Super&gt;Tab" type="string" value="switch_window_key"/>

Измените это на:

<property name="&lt;Super&gt;Tab" type="empty"/>

Выйдите из системы или перезагрузите компьютер

Я только что установил Vim, и все было решено. Сначала я подумал, что он был установлен в исходной версии Ubuntu, так как я мог использовать команду Vi, но это не так.

sudo apt-get install vim 

решил проблему.

sudo sh -c "if [ -e $(which bash) ]; then rm $(which sh) && ln -s $(which bash) /bin/bash; fi"

Моя проблема заключалась в том, что /bin/sh был привязан к /bin/dash.

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

Например, завершение с помощью табуляции не удалось для команды+файла:totem ~/Videos/SomefilenameWithNoSuffix, но отлично заработало после того, как я переименовал .mkv в ~/Videos/SomefilenameWithNoSuffix.mkv.

Если все остальное работает, но только определенные попытки завершения имени файла (автозаполнение) терпят неудачу, возможно, вам не хватает прав для поиска в каталоге, который является компонентом пути.

Предположим, вы хотите получить список для какого-то другого пользователя. .bash_profileфайл. Следующая команда будет работать; потому что запускает команду с необходимым разрешением.

      $ sudo ls -al /home/someone_else/.bash_profile    

Однако, если вы попытаетесь использовать завершение имени файла, завершение табуляции ничего не даст.

      $ sudo ls -al /home/someone_else/.bash_pr<tab>   # does not complete

Это потому, что bashзавершение работает до того, как будет вызвано. Команда также может быть:

      $ ls -al /home/someone_else/.bash_pr<tab>   

Поскольку разрешение на поиск в этом каталоге отсутствует, завершение команды ничего не делает.

Чтобы временно запустить с большими разрешениями, вы можете запустить новую оболочку с расширением .

      $ sudo bash

The lsкоманда теперь может быть запущена без sudoпредикат и автозаполнение работает. (Обратите внимание, что подсказка переключается с $к #.)

      # ls -al /home/someone_else/.bash_pr<tab>   

Просто убедитесь, что вы убили оболочку, когда ваша задача будет завершена; снаряд такой мощности опасен.

      # exit

В моем случае это оказалась функция, которую я создал в своем .bash-aliasesфайл под названием "тест". Если у вас все еще возникают эти ошибки, просмотрите свои пользовательские псевдонимы в .bashrc, .bash_profile, а также .bash_aliases, временно удалив все подозрительные дополнения и повторите попытку автозаполнения bash.

Некоторые ответы могут решить эту проблему. Однако, чтобы сделать состояние постоянным , я думаю, вы должны сделать это.

Чтобы проверить текущий терминал, введите это на вашемsshТерминал.

      echo $TERM

Если быunknownили что-то странное, вы можете изменить это, выполнив следующие действия:

      echo 'export TERM=linux' >> ~/.bash_profile

Вы также можете проверитьbash_profileс использованиемvimили что-то еще:

      vim ~/.bash_profile

Это решит все: вставь и нажми. После этого вы сможете выполнить автозаполнение из истории, используя стрелку вверх.

bind '"\e[A": history-search-backward'

Взято с: https://unix.stackexchange.com/questions/5366/command-line-completion-from-command-history Также вы можете использовать Ctrl + R, чтобы просмотреть свою историю.

Другие вопросы по тегам