Использование стрелки вверх для запуска предыдущей команды

11

Какие настройки мне нужно использовать стрелку вверх для запуска предыдущей команды? С Mac я могу использовать стрелку вверх для повторного запуска только что запущенной команды, но она не работает с моей оболочкой bash.

Я использую 8.04 (я не могу использовать новейший дистрибутив из-за проблем с версией компилятора).

ADDED

Я ничего не изменил, так как это новая установка с VMWare Fusion на Mac.

prosseek
источник
3
В конфигурации по умолчанию стрелка вверх работает отлично: вы что-то изменили?
энзотиб
как говорит @enzotib, bash сделает это по умолчанию, но некоторые другие, например, sh, не будут!
Рори Олсоп

Ответы:

10

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

set -o

Вывод должен содержать (обратите внимание на history onстроку):

histexpand      on
history         on
ignoreeof       off

Если это не включено, вам нужно запустить set -o history. Чтобы сделать это изменение постоянным, вам нужно добавить его в ~/.bashrc:

set -o history

Если вы хотите выполнить предыдущую команду, вы также можете выполнить следующую команду:

!!

Со страницы руководства Bash :

Event Designators
   An event designator is a reference to a command line entry in the history list.

   !      Start a history substitution, except when followed by a blank, newline,
          carriage return, = or ( (when the extglob shell option  is
          enabled using the shopt builtin).
   !n     Refer to command line n.
   !-n    Refer to the current command line minus n.
   !!     Refer to the previous command.  This is a synonym for `!-1'.
   !string
          Refer to the most recent command starting with string.
   !?string[?]
          Refer to the most recent command containing string.  The trailing ? 
          may be omitted if string is followed immediately by a newline.
   ^string1^string2^
          Quick  substitution.  Repeat the last command, replacing string1 with
          string2.  Equivalent to ``!!:s/string1/string2/'' (see Modifiers below).
   !#     The entire command line typed so far.

Если вы используете Bash, вы также можете использовать ярлыки по умолчанию для навигации по истории:

  • Ctrl+ P: Предыдущая команда
  • Ctrl+ N: Следующая команда

    Команды для манипулирования историей предыдущая история (Cp) Извлечение предыдущей команды из списка истории, перемещение назад в список. next-history (Cn) Извлечь следующую команду из списка истории, двигаясь вперед в списке.

Lekensteyn
источник
1
Я проверил правильность настройки, но клавиша со стрелкой вверх не работает. Тем не менее, я могу использовать Ctrl-P / N для получения того же результата. Благодарю.
prosseek
@prosseek В этом случае вы изменились /etc/inputrcили ~/.inputrc? Кроме того, какую управляющую последовательность производят стрелки вверх и вниз в терминале, который вы используете? Чтобы проверить, запустите cat, затем на пустой строке, нажмите вверх или вниз, затем Ctrl + C, чтобы выйти из cat. Вот это выдает ^[[A^[[B.
Гейра
@geirha: у меня нет файла ~ / .inputrc, и я ничего не менял / etc / inputrc. И для последовательности побега я ничего не видел на экране.
prosseek
@prosseek Тогда кажется, что клавиши со стрелками никогда не доходят до терминала вообще. Возможно, интерфейс VMWare отфильтровывает их или что-то в этом роде.
Гейра
14

Убедитесь, что вы используете bash. Обычная ошибка - создание нового пользователя с приложением useraddвместо adduserпользователей или групп (GUI). С первым набором оболочки по умолчанию является /bin/sh. Run chsh( ч Анж ш флигель) , чтобы убедиться , что он установлен /bin/bash.

geirha
источник
1

В терминале введите:

gedit  ~/.inputrc

Затем скопируйте вставить и сохраните:

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

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

Шайлеш Сингх
источник