Руководство

Руководство

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

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

решение1

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

~/.bash_history

Руководство

терминал обратный-i-поиск

При активном окне терминала нажмите 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.

решение3

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и Down. Нажатие Upодин раз покажет вам предыдущую выполненную команду, повторное нажатие покажет предыдущую и т. д. Кнопка Downпереместит вас в другую сторону.

    В большинстве современных систем (например, 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:

    Список значений, разделенных двоеточием, контролирующий, как команды сохраняются в списке истории. Если список значений включает в себя ignorespace, строки, начинающиеся с символа пробела, не сохраняются в списке истории. Значение ignoreups приводит к тому, что строки, соответствующие предыдущей записи истории, не сохраняются. Значение ignoreboth является сокращением для ignorespace и ignoreups. Значение eraseredups приводит к тому, что все предыдущие строки, соответствующие текущей строке, удаляются из списка истории перед сохранением этой строки. Любое значение, не входящее в приведенный выше список, игнорируется. Если 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;'

Связанный контент