2

Есть ли способ просмотреть все прошлые действия / записи для командной строки, например, функцию «истории» в браузере?

Немного фона Я использую терминал OSX для взаимодействия с командной строкой.

3 ответа3

5

Если ваш системный администратор или вы сами не установили $HISTFILE на что-то другое, ваша история сохраняется в

~/.bash_history

Руководство

терминал обратного поиска

При активном окне терминала нажмите Control+R и появится запрос reverse-i-search . Теперь просто начните вводить первые несколько символов ранее использованной команды - и вся команда отобразится. Это неоценимо для тех из нас, у кого короткие воспоминания и длинные команды.

увеличить размер истории терминала

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

Если у вас есть .bash_profile

  1. Откройте .bash_profile в любом текстовом редакторе.
  2. Добавь это:

    HISTFILESIZE=1000000000 HISTSIZE=1000000

  3. Сохранить и выйти

Если у вас нет .bash_profile

  1. Начать Терминал
  2. Перейдите в домашнюю папку, введя:

    cd ~/

  3. Создайте .bash_profile, введя:

    touch .bash_profile

  4. Теперь либо отредактируйте файл .bash_profile в вашем любимом текстовом редакторе, либо введите его в окне терминала, чтобы автоматически открыть файл в TextEdit по умолчанию:

    open -e .bash_profile

  5. Наконец, добавьте это в файл .bash_profile:

    HISTFILESIZE=1000000000 HISTSIZE=1000000

  6. Сохранить и выйти

Авторы этого замечательного урока принадлежат мектоидам.

2

Во многих оболочках вы можете увидеть историю команд, просто набрав history .

1

У Bash довольно много вариантов работы с вашей историей. Прежде всего, ваша история сохраняется в текстовом файле. Обычно это ~/.bash_history но его можно изменить, установив переменную $HISTFILE в другое значение.

Самый простой способ получить доступ к вашей истории

  1. Команда history . Без опций он просто распечатает содержимое вашего $HISTFILE . Тем не менее, он имеет довольно много опций для манипулирования списком истории. Вы можете увидеть их все с help history . Те, которые я считаю особенно полезными,

    -a  append history lines from this session to the history file
    -r  read the history file and append the contents to the history list
    

    У меня есть эта строка в моем файле инициализации bash (это ~/bash_profile для OSX и ~/.bashrc для большинства других * nix):

    export PROMPT_COMMAND='history -a;history -r;'
    

    Эти две команды запускаются каждый раз, когда я получаю новое приглашение (каждый раз, когда терминал отображает $ , при первом его открытии и после каждого запуска команды). В результате моя история распределяется по всем терминальным окнам, так как после каждого выполнения команды эта команда записывается в $HISTFILE а затем $HISTFILE читается с диска.

  2. Кнопки вверх и вниз . Нажатие Up раз покажет предыдущую команду, выбежала, попав снова будет показывать один до этого и так далее. Кнопка « Вниз» переместит вас в другую сторону.

    Это включено по умолчанию в большинстве современных систем (таких как OSX), но если это не так, вы можете включить это поведение, добавив эти строки в файл ~/.inputrc:

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

Bash также предлагает довольно много опций и переменных, которые управляют поведением истории (многие из которых упомянуты в очень хорошем ответе @ Chris, я упомяну некоторые, которые он не делает):

  • histappend

    If  set,  the history list is appended to the file named by the 
    value of the HISTFILE variable when the shell exits, rather than
    overwriting the file.
    

    Опять же, это должно быть установлено по умолчанию. Если вы заметили, что история не сохраняется в сеансах терминала, добавьте эту строку в ваш ~/.bash_profile:

    shopt -s histappend
    
  • Переменная HISTCONTROL:

    Список значений, разделенных двоеточиями, управляющий тем, как команды сохраняются в списке истории. Если в списке значений есть пробел игнорирования, строки, начинающиеся с пробела, не сохраняются в списке истории. Значение ignoredups приводит к тому, что строки, соответствующие предыдущей записи истории, не сохраняются. Значение ignoreboth является сокращением для ignorespace и ignoredups. Значение erasedups приводит к тому, что все предыдущие строки, соответствующие текущей строке, удаляются из списка истории перед сохранением этой строки. Любое значение, отсутствующее в приведенном выше списке, игнорируется. Если HISTCONTROL не установлен или не содержит допустимого значения, все строки, прочитанные синтаксическим анализатором оболочки, сохраняются в списке истории, в зависимости от значения HISTIGNORE. Вторая и последующие строки многострочной составной команды не тестируются и добавляются в историю независимо от значения HISTCONTROL.

  • Переменная HISTIGNORE:

    Разделенный двоеточиями список шаблонов, используемых для определения того, какие командные строки следует сохранить в списке истории. Каждый шаблон привязывается в начале строки и должен соответствовать полной строке (неявный *' is appended). Each pattern is tested against the line after the checks specified by HISTCONTROL are applied. In addition to the normal shell pattern match‐ ing characters, соответствующим шаблону оболочки, & 'соответствует предыдущей строке истории. `& 'может быть экранировано с помощью обратной косой черты; обратная косая черта удаляется перед попыткой совпадения. Вторая и последующие строки многострочной составной команды не тестируются и добавляются в историю независимо от значения HISTIGNORE.

Собрав все это вместе, у меня есть следующие строки в моем файле инициализации оболочки (~/.bash_profile для OSX ~/.bashrc для большинства других):

export HISTCONTROL=ignoredups
export HISTSIZE=10000
export HISTIGNORE="pwd:df:du:ls"

## Make Bash append rather than overwrite the history on disk:
shopt -s histappend

## history -a causes the last command to be written to the
## history file automatically and history -r imports the history
export PROMPT_COMMAND='history -a;history -r;'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .