Я хотел бы создать псевдоним в zsh, который запускает мою последнюю команду терминала, начинающуюся с node
. Я могу запустить эту команду с !?node
, но я не могу создать псевдоним с alias N='!?node'
. Как мне создать этот псевдоним?
решение1
Расширение истории выполняется в командной строке.дорасширение псевдонима. Таким образом, помещение расширения истории в псевдоним не сработает, поскольку после расширения псевдонима дальнейшее расширение истории не выполняется.
С другой стороны, выполняется расширение параметрапослерасширение псевдонима. Поэтому вы можете использовать это вместо этого:
alias N='"${(z)history[(r)node *]}"'
(r)
получает первое вхождение шаблона после него. В этом случае он извлечет самый последний соответствующий элемент истории, потому что$history
всегда упорядочен от самых новых к самым старым.(z)
анализирует строку как код и возвращает полученные слова оболочки. В противном случае все расширение рассматривается как одно слово.- Двойные
"
кавычки"
необходимы для правильного анализа пробела. В противном случае он будет рассматриваться как разделитель слов, что приведет к синтаксической ошибке. - Одинарные
'
кавычки'
необходимы для предотвращения немедленного выполнения расширения параметра при объявлении.