Как я могу добавить определенные команды в .bash_history навсегда? - PullRequest
3 голосов
/ 03 октября 2011

Я использую bash, и мне иногда приходится набирать несколько очень длинных команд для определенных задач.Эти длинные команды не используются регулярно и обычно перезаписываются в файле .bash_history, когда я снова их использую.Как я могу добавить определенные команды в .bash_history навсегда?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 03 октября 2011

Как уже упоминали другие, обычный способ сделать это - сохранить ваши длинные команды как псевдонимы или функции bash. Хороший способ организовать их - поместить их в файл (скажем, $HOME/.custom_funcs), а затем получить их из .bashrc.

.

Если вы действительно хотите загружать команды в свою историю bash, вы можете использовать опцию -r команды history.

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

-r    Read the current history file and append its contents to the history list. 

Просто сохраните все свои записи в файле, и всякий раз, когда вам нужно загрузить свою собственную историю, просто запустите history -r <your_file>.

Вот демонстрация:

[me@home]$ history | tail  # see current history
 1006  history | tail
 1007  rm x
 1008  vi .custom_history
 1009  ls
 1010  history | tail
 1011  cd /var/log
 1012  tail -f messages
 1013  cd
 1014  ls -al
 1015  history | tail  # see current history

[me@home]$ cat $HOME/.custom_history  # content of custom history file
echo "hello world"
ls -al /home/stack/overflow
(cd /var/log/messages; wc -l *; cd -)

[me@home]$ history -r $HOME/.custom_history   # load custom history

[me@home]$ history | tail  # see updated history
 1012  tail -f messages
 1013  cd
 1014  ls -al
 1015  history | tail  # see current history
 1016  cat .custom_history
 1017  history -r $HOME/.custom_history
 1018  echo "hello world"
 1019  ls -al /home/stack/overflow
 1020  (cd /var/log/messages; wc -l *; cd -)
 1021  history | tail  # see updated history

Обратите внимание, что записи 1018-1020 на самом деле не выполнялись, а загружались из файла.

На данный момент вы можете получить к ним доступ, как обычно, используя команды history или ! или Ctrl + r и другие ярлыки.

1 голос
/ 03 октября 2011

Как насчет увеличения размера файла истории bash с помощью переменной оболочки

HISTFILESIZE

Вместо 500 по умолчанию сделайте что-то вроде 2000

0 голосов
/ 03 октября 2011

Вы можете создать псевдоним для вашей команды.

alias myalas = '... очень длинная команда здесь ...'

0 голосов
/ 03 октября 2011

Канонический ответ - создать сценарии, содержащие эти команды.

Редактировать Предположим, у вас есть следующие записи истории;

find /var/www -name '*.html' -exec fgrep '<title>' {} /dev/null \;
find ~/public_html -name '*.php' -exec fgrep include {} /dev/null \;

... вы можете попытаться выделить параметры в функцию, подобную этой;

r () {
  find "$1" -name "*.$2" -exec fgrep "$3" {} /dev/null \;
}

... которую вы могли бы использовать таким образом, чтобы повторить записи истории сверху:

r /var/www      html '<title>'
r ~/public_html php  include

Очевидно, что в этом случае шаг не будет очень долгим для создания правильного сценария со значениями по умолчанию, проверкой параметров и т. Д. (Совет: вы можете с пользой использовать по умолчанию текущий каталог для пути и без расширения для имени файла, и добавить такие опции, как --path и --ext, чтобы переопределить значения по умолчанию, когда вы захотите, тогда в скрипте будет только один обязательный аргумент.)

Как правило, вы должны хранить скрипт в $HOME/bin и убедиться, что этот каталог добавлен в ваш PATH из вашего .profile или аналогичного. Для функций они обычно определяются в .profile или в отдельном файле, который source d из этого файла.

Наличие этого в центральном месте также помогает развивать это; например, для точности и, возможно, некоторой незначительной дополнительной эффективности, вы можете добавить -type f к команде find; теперь есть только одно место, которое нужно запомнить для редактирования, и вы исправите его навсегда.

...