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. Тем не менее, мне нравится, когда они там, чтобы подчеркнуть намерение, что это распространяется на один аргумент.