Получить историю bash, чтобы запомнить только команды, выполняемые с префиксом пробела!

10

Команды, выполняемые в терминале с префиксом (-ами), не записываются в файл истории команд. Но есть ли способ получить обратное, то есть история должна записывать только те, которые имеют префикс с пробелом?

точный
источник

Ответы:

12

Вы можете изменить настройки Ubuntu по умолчанию, установив две переменные (HISTIGNORE a HISTCONTROL), используя команды, как показано ниже:

HISTIGNORE='!( *)'
HISTCONTROL=ignoredups

HISTCONTROL=ignoredupsизменяет поведение истории, чтобы игнорировать только повторяющиеся строки, а не игнорировать строки, начинающиеся с пробела. (Вы также можете установить HISTCONTROL в пустую строку (с HISTCONTROL=), если вы хотите сохранить дубликаты, но это обычно не требуется.)

HISTIGNORE='!( *)'заставляет историю игнорировать каждую строку, которая не начинается с пробела: ( *)соответствует каждой строке, начинающейся с пробела, но ведущая !сводит на нет совпадение, поэтому она соответствует всему, что не начинается с пробела. И все, что соответствует шаблону HISTIGNORE, будет игнорироваться историей. (Этот последний вариант требует, чтобы bash запускался с extglobвключенным, с shopt -s extglob, но это настройка по умолчанию в Ubuntu.)

Если вы хотите сделать это постоянным, не забудьте поместить две вышеупомянутые команды в вашу ~/.bashrc.

сокольничий
источник
спасибо, это именно то, что я хотел .. сохранил изменения в .bashrc.. мне нужно было это, чтобы bash не записывал каждую cds, lss и другие повседневные команды, которые я использую; и для тех немногих команд, которые мне нужны в истории, теперь я могу использовать префикс ..
точный
1
@rusty Если вы хотите исключить только тривиальные команды, для вас может быть лучше, если вы используете что-то вроде этого HISTIGNORE='ls*:cd*', что заставит историю игнорировать каждую строку, начинающуюся с lsили cd, вы можете расширить этот список с помощью других команд, просто поставив :между командами , Но не забывайте, что функция отзыва команд, доступ к которой вы можете получить с помощью «клавиши со стрелкой вверх», также использует эту историю, поэтому, если вы установите что-то для игнорирования, вы не сможете вызывать эти игнорируемые команды с помощью «». стрелка вверх".
сокольничий
Я хотел игнорировать любую команду SSH, но не такие команды, как ssh-copy-idили ssh-keygen. В HISTIGNORE, я включил " ssh\ *" с другими моими игнорируемыми командами. Выход из космического символа представляется обязательным.
user38537
2

« Команды, выполняемые в терминале с префиксом (ами), не записываются в файл истории команд »

Да.

предельная история

MrVaykadji
источник
1
это настройка в bash ;-)
Rinzwind
команда с префиксом пробела. Как `sudo apt-get update`
Raj
Каково значение вашей переменной HISTCONTROL?
Гленн Джекман
@AvinashRaj: да, посмотри мне команду «это не должно быть записано», я поставил пробел (видимый как в командной строке, так и в истории). Так что это не сработает. Может быть, вы можете настроить его (с помощью HISTCONTROL); но это не так по умолчанию.
MrVaykadji