Получить `pwd` в `псевдониме`?

#zsh #zshrc

#zsh #zshrc

Вопрос:

Есть ли способ, которым я могу получить pwd в alias в моем .zshrc файле? Я пытаюсь сделать что-то вроде следующего:

 alias cleanup="rm -Rf `pwd`/{foo,bar,baz}"
  

В bash это отлично работало; pwd это всегда каталог, в который я cd перешел, однако в zsh кажется, что он оценивается при первой загрузке .zshrc файла и всегда остается моим домашним каталогом. Я тестировал использование с действительно простой alias настройкой, но она никогда не меняется.

Как я могу изменить это, чтобы вызов alias из подкаталога всегда оценивался как этот subdir?

РЕДАКТИРОВАТЬ: не уверен, поможет ли это, но я использую zsh через oh-my-zsh на Mac.

Комментарии:

1. Хм, что-то не так с использованием функции вместо этого? function pwdtestf(){echo pwd } , похоже, работает?

2. @UlrichSchwarz pwd работает только в функции, а не в скрипте псевдонима. Мой ENV: iTerm2 ohmyzsh

Ответ №1:

Когда ваша .zshrc загружена, alias выполняется команда. Команда состоит из двух слов: имени команды (встроенной alias ) и одного аргумента, который является результатом расширения cleanup="rm -Rf `pwd`/{foo,bar,baz}" . Поскольку обратные кавычки интерполируются между двойными кавычками, этот аргумент расширяется до cleanup=rm -Rf /home/unpluggd/{foo,bar,baz} (это одно слово оболочки), где /home/unpluggd находится текущий каталог на данный момент.

Если вы хотите избежать интерполяции во время определения команды, используйте вместо этого одинарные кавычки. Это почти всегда то, что вы хотите для псевдонимов.

 alias cleanup='rm -Rf `pwd`/{foo,bar,baz}'
  

Однако это излишне сложно. Вам не нужно `pwd/` указывать перед именами файлов! Просто напишите

 alias cleanup='rm -Rf -- {foo,bar,baz}'
  

( -- необходимо, если foo может начинаться с - , чтобы избежать его разбора в качестве опции для rm ), который может быть упрощен, поскольку фигурные скобки больше не нужны:

 alias cleanup='rm -Rf -- foo bar baz'
  

Комментарии:

1. Такой потрясающий ответ вы получаете только на SO! Спасибо, Жиль!