Intereting Posts
Как создать правило для замены пользовательского флага с помощью оболочки C? xargs не запрашивает после каждой строки Статистика «Memcache» сообщает о ненулевых «curr_connections», но lsof не показывает соединений сокетов Развернуть переменную в расширении скобки Включить прокрутку и щелкнуть правой кнопкой мыши на трекпаде в Кали вместе с подсветкой клавиатуры Текст эха, предложенный подсказкой в ​​bash Обновите репозиторий Red Hat без пакетов Как я могу просматривать состояние и управлять скриптом python, регулярно выполняющимся на сервере? Идентификатор файла устройства Pci? Синхронизация пакетов программного обеспечения между различными дистрибутивами Linux Установите Apache и PHP на Centos без менеджера пакетов (yum, rpm …) Гарнитуры, совместимые с Linux Неудовлетворенные зависимости работа с именами файлов в другой кодировке по ssh Как реализовать предложение об установке пакета на Debian?

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

На Mac, Сьерра.

У меня нет настроек, связанных с HIST , которые я вижу:

 ~ @ Magni (jcollum) $ env|grep HIST ~ @ Magni (jcollum) $ cat ~/.bash_profile | grep HIST ~ @ Magni (jcollum) 

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

Я знаю, что здесь есть сообщения, которые рассказывают мне, как это исправить, но я хотел бы знать, почему так происходит.

Например, когда я grep за curl который я провел вчера, ничего:

 ~ @ Magni (jcollum) $ history | grep curl 166 curl -X POST -d email=jollum@gmail.com -d password=********** http://localhost:3000/login 503 hg curl 519 history | grep curl 

400 команд назад? Я знаю, что на прошлой неделе я использовал curl дюжину раз, но (и я не использую bash, чтобы на этой неделе запустить сотни команд).

В основном я просто озадачен и не знаю, почему этого не хватает, что я сделал. Возможно ли, что история записывается только из одного экземпляра bash?

Возможно ли, что история записывается только из одного экземпляра bash?

Это то, что происходит. Способ истории работает в bash, если вы не переместились на некоторые длины, чтобы изменить его:

  • Когда bash запускается, он загружает сохраненную историю из файла истории.
  • Каждый раз, когда выполняется команда, она добавляется в историю в памяти bash.
  • Когда bash выходит, он сохраняет накопленную историю в файл истории.

Теперь предположим, что вы запускаете два экземпляра bash. Оба загружают файл истории при их запуске. Оба добавляют команды, которые они запускают в свою собственную историю. Когда один экземпляр завершается, он сохраняет старую историю и свои собственные команды в файле истории. Когда второй экземпляр завершает работу, он сохранил старую историю и свою собственную команду в файле истории – и при этом он стирает историю из первого экземпляра, который вышел из него.

Механизм сохранения истории Баша слишком упрощен. Ваши строки истории находятся во власти любого другого исполняемого экземпляра – в зависимости от того, что выйдет последним, вытирает историю других. Решения включают добавление новой истории в файл истории, а не перезапись файла истории со всей историей в памяти или добавление строк в файл истории, как только они будут выполнены. См. « Сохранение истории bash в нескольких окнах терминала» и « Сохранение истории bash в нескольких терминальных окнах» для некоторых способов реализации этого и других вариантов.

Самое простое решение – запустить zsh, что по умолчанию сохраняет историю по разумной цене. Я рекомендую это, тем более, что вы используете macOS, который застрял в древней версии bash, потому что Apple не любит лицензию версий, выпущенных с 2009 года.