
Есть ли способ просмотреть все прошлые действия/записи для командной строки, как функция «истории» в браузере?
Немного предыстории Я использую терминал OSX для взаимодействия с командной строкой.
решение1
Если ваш системный администратор или вы сами не установили $HISTFILE
что-то другое, ваша история хранится в
~/.bash_history
Руководство
терминал обратный-i-поиск
При активном окне терминала нажмите Control+R
и reverse-i-search
появится приглашение. Теперь просто начните вводить первые несколько символов ранее использованной команды – и вся команда будет отображена. Это бесценно для тех из нас, у кого короткая память и длинные команды.
увеличить размер истории терминала
Если вам нравится идея напоминания Терминалом предыдущих команд, то вы можете увеличить размер файла истории Терминала — для еще большего хранения истории.
Если у вас есть .bash_profile
Откройте .bash_profile в текстовом редакторе по вашему выбору.
Добавь это:
HISTFILESIZE=1000000000 HISTSIZE=1000000
Сохранить и выйти
Если у вас нет .bash_profile
Запустить терминал
Перейдите в домашнюю папку, введя:
cd ~/
Создайте .bash_profile, введя:
touch .bash_profile
Теперь либо отредактируйте .bash_profile в вашем любимом текстовом редакторе, либо введите это в окне терминала, чтобы автоматически открыть файл в TextEdit по умолчанию:
open -e .bash_profile
Наконец, добавьте это в файл .bash_profile:
HISTFILESIZE=1000000000 HISTSIZE=1000000
Сохранить и выйти
Благодарность за этот замечательный урок принадлежитмактоиды.
решение2
Во многих оболочках вы можете просмотреть историю команд, просто набрав history
.
решение3
Bash имеет довольно много опций для работы с вашей историей. Во-первых, ваша история сохраняется в текстовом файле. Это обычно, ~/.bash_history
но это можно изменить, установив $HISTFILE
переменную на что-то другое.
Самый простой способ получить доступ к вашей истории:
Команда
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
затем считывается с него.Кнопки 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;'