Я начал использовать Mac недавно и до того, как начал работать с Ubuntu.
Предположим, я запускаю эти команды одну за другой на своем терминале:
python3 main.py
python3 main2.py
python3 main2.py
python3 main2.py
python3 main2.py
python3 main2.py
python3 main2.py
Теперь предположим, что я хочу python main.py
снова запустить , поэтому я нажму клавишу вверх. Мне нужно будет нажать клавишу только дважды на Ubuntu, но 7 раз на Mac.
Если две последовательные команды совпадают, то терминал должен запомнить только одну команду вместо того, чтобы запоминать две разные команды.
Как я могу сделать это на MacOS?
zsh
и даже дальше, чтобы настроить zsh с помощью различных сценариев.Ответы:
Вам нужно добавить переменную окружения HISTCONTROL в свой
.bash_profile
. В вашем.bash_profile
добавьте следующую строку:Закройте и перезапустите сеанс bash, а обман должен исчезнуть. В качестве альтернативы, вы можете просто выполнить ту же строку, и она вступит в силу для этого сеанса (используйте ее для проверки).
Со страницы руководства для
bash
(в Терминале):источник
Почему это происходит?
MacOS и Ubuntu настроены по-разному для обработки дубликатов в истории команд bash. Эти конфигурации хранятся в нескольких так называемых « точечных файлах ». Они принимают форму ~ / .bash *, а также системный профиль / etc /. Все эти файлы могут быть настроены по вашему вкусу и различать интерактивные оболочки, оболочки входа в систему, удаленные оболочки и т. Д. Эти файлы читаются в определенном порядке и выполняют определенные функции.
Как получить такое же поведение на macOS?
Если вы хотите именно эту единственную настройку «игнорирования точных дубликатов командных строк», вы можете пойти с чем-то вроде ответа Аллана, то есть добавить одну единственную строку, например, в ваш файл bash_profile. Нет «правильного пути», но есть бесчисленное множество вариантов.
Если это не единственная настройка для вашего bash, то это может быть не лучшим вариантом:
Это означает , что, когда ситуация становится более сложной это хорошая идея , чтобы разложить в настройках на несколько файлов, каждый из которых специализируется и высокоупорядоченную в их содержание:
Все
exports
могут находиться в своем собственном файле для упрощенного надзора.Создайте файл, который будет прочитан bash в корневом каталоге вашего пользовательского каталога, например,
.exports
который содержит:Это должно быть "получено", чтобы bash читал файл при интерактивном запуске:
В качестве альтернативы, чтобы убедиться, что файлы действительно существуют перед загрузкой
Команда
. ~/.exports
будет исходить~/.exports
из контекста текущей запущенной оболочки.источник
.exports
получить чтение (источник)?HISTCONTROL
установлено в.bashrc
и~/.bashrc
поступают в~/.bash_profile
том нет никакой необходимостиexport
вHISTCONTROL
переменном. И интерактивная оболочка входа в систему, и интерактивная оболочка будут иметь установленную переменную.Для уникальной записи каждой новой команды сложно. Сначала вам нужно добавить
~/.profile
или аналогичный:Затем вам нужно добавить в
~/.bash_logout
:источник