Bash не выполняет раскрытие истории после раскрытия псевдонима, поэтому вы должны делать это явно, используя history
, описанную в Bash History Builtins и приведенную ниже.
history -ps args
-p
Выполните подстановку истории по аргументам и отобразите результат на стандартном выводе, не сохраняя результаты в списке истории.
-s
Аргументы добавляются в конец списка истории как одна запись.
Псевдоним alias fixsha='vim $(history -p !$)/SHA1SUM'
будет работать большую часть времени, но не так, как предполагалось, когда !$
раскрывается в путь, содержащий пробелы. Добавление двойных кавычек вокруг аргумента пути защитит любые экранированные символы в vim "/foo/bar\ baz/SHA1SUM"
а не к желаемому vim /foo/bar\ baz/SHA1SUM
или его эквивалентному vim "/foo/bar baz/SHA1SUM"
.
Таким образом, в дополнение к явному расширению истории, eval
также необходим, чтобы развернуть один слой цитирования.
alias fixsha='eval vim "$(history -p !$)/SHA1SUM"'
Примечание. Вы можете быть удивлены, узнав, что двойные кавычки в приведенном выше определении псевдонима не нужны. Это потому, что между расширенным значением !$
и /SHA1SUM
для запуска разбиения слов в bash. Тем не менее, мне нравится, когда они там, чтобы подчеркнуть намерение, что это распространяется на один аргумент.