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

Да, должно. Будет это или нет - решать утилите.

Файлы и соединения обычно закрываются при выходе из программы по любой причине, однако «другая работа» может быть оставлена ​​наполовину (временные файлы могут быть оставлены, базы данных могут находиться в сомнительном состоянии, данные на самом деле не записанные в файлы будут потеряны и т. д.)

Программа может поймать сигнал TERM в обработчике сигнала и корректно выйти из , т.е. завершить все, что она делала, и выйти из мир в упорядоченном состоянии после фактического прекращения. Он также может улавливать и полностью игнорировать сигнал.

3
27.05.2017, 04:35
1 ответ

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

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

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

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

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

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

4
27.01.2020, 21:18

Теги

Похожие вопросы