Почему это происходит?
MacOS и Ubuntu настроены по-разному для обработки дубликатов в истории команд bash. Эти конфигурации хранятся в нескольких так называемых « точечных файлах ». Они принимают форму ~ / .bash *, а также системный профиль / etc /. Все эти файлы могут быть настроены по вашему вкусу и различать интерактивные оболочки, оболочки входа в систему, удаленные оболочки и т. Д. Эти файлы читаются в определенном порядке и выполняют определенные функции.
Как получить такое же поведение на macOS?
Если вы хотите именно эту единственную настройку «игнорирования точных дубликатов командных строк», вы можете пойти с чем-то вроде ответа Аллана, то есть добавить одну единственную строку, например, в ваш файл bash_profile. Нет «правильного пути», но есть бесчисленное множество вариантов.
Если это не единственная настройка для вашего bash, то это может быть не лучшим вариантом:
Несколько других заметок:
- Все, что должно быть доступно для графических приложений ИЛИ для sh (или bash, вызываемого как sh), ДОЛЖНО быть в ~ / .profile
- ~ / .bashrc не должен ничего выводить
- Все, что должно быть доступно только для оболочек входа, должно идти в ~ / .profile
- Убедитесь, что ~ / .bash_login не существует.
Это означает , что, когда ситуация становится более сложной это хорошая идея , чтобы разложить в настройках на несколько файлов, каждый из которых специализируется и высокоупорядоченную в их содержание:
Все exports
могут находиться в своем собственном файле для упрощенного надзора.
Создайте файл, который будет прочитан bash в корневом каталоге вашего пользовательского каталога, например, .exports
который содержит:
# Omit duplicates and commands that begin with a space from history.
export HISTCONTROL='ignoreboth';
Это должно быть "получено", чтобы bash читал файл при интерактивном запуске:
Sourcing files
Если у вас много конфигураций оболочки, вы можете разделить их на несколько субфайлов и использовать встроенную программу-источник для загрузки их из вашего .bashrc: с добавлением source ~/.exports
в него.
В качестве альтернативы, чтобы убедиться, что файлы действительно существуют перед загрузкой
if [ -f ~/.exports ]; then
. ~/.exports
fi
Команда . ~/.exports
будет исходить ~/.exports
из контекста текущей запущенной оболочки.
Это особенно полезно для добавления псевдонимов, отдельный файл упрощает их повторную загрузку при внесении изменений.
zsh
и даже дальше, чтобы настроить zsh с помощью различных сценариев.