Могу ли я иметь историю истории оболочки, как расширяются шаблоны?
Если я запустил:
$ ls * foo bar buzz $ history | tail -1 ls *
Вы можете видеть, что в моей истории оболочки он помнит, что я запустил ls *
а не ls foo bar buzz
. В идеале я бы хотел записать как в отдельных историях. Когда я задаюсь вопросом: «Что случилось с файлом foo?», Было бы неплохо иметь возможность вернуться и выяснить, что я сделал rm *
в неправильном каталоге, просмотрев мою историю и обнаружив «foo ».
- Где задана функция, заданная «подсказка»?
- Проблемы с дублированием $ PATH
- ZSH: Рекурсивное подталкивание с помощью .directories
- Сериализовать переменную оболочки в bash или zsh
- Как проверить, не существует ли файл с использованием ZSH?
Меня интересуют решения как для zsh, так и для bash.
- Что означает «следовая ловушка», когда сообщается zsh?
- Как передать переменные среды в новый сеанс входа в ssh?
- Как обновить приглашение на изменение каталога
- zsh: Повторять каждое утверждение?
- Почему мой вывод не завершается в tmux?
- Элементы списка с пробелами в zsh
- Возврат карты без другого ввода в псевдоним
- Каков эффект «$ {(@ f) ...}» в Zsh?
One Solution collect form web for “Могу ли я иметь историю истории оболочки, как расширяются шаблоны?”
Я не думаю, что какая-либо оболочка ничего не делает за пределами пробелов при хранении команд в истории. То, что *
расширено, не записано, и, похоже, нет возможности записать его.
Обратите внимание, что в любом случае невозможно было бы записать полную общность. Например, если вы запустите a='foo* bar*'; rm $a
a='foo* bar*'; rm $a
( rm $=~a
в zsh), оболочка вряд ли будет синтаксически распознавать подстановочный знак. И нет возможности регистрировать все расширения glob.
Вы могли бы preexec
что-то вместе с preexec
(или эквивалентом bash ). Непроверенный первый go (для zsh):
history_wildcards=() precmd () { emulate -LR zsh local n tmp history -1 | read n tmp history_wildcards[$(($n+1))]=$=~1 }
Это заполняет массив history_wildcards
строкой с расширением glob каждого слова в командной строке. Разделение слов выполняется наивным образом, поэтому что-то вроде echo ' /**/* '
будет расширяться /**/*
(т. Е. Пересекать ваш диск). Не ожидайте ничего полезного из cd subdir && echo *
или чего-то такого, что неразумно для ума.
Если вы планируете заранее, вы можете сделать zsh расширять подстановочные знаки перед отправкой команды. В конфигурации по умолчанию просто нажмите « Tab», когда ваш курсор находится в глобусе. Если вы настроили завершение по-другому, попробуйте ^X *
( expand-word
).