Получить `pwd` в` псевдоним`? - PullRequest
11 голосов
/ 06 апреля 2011

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

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

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

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

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

1 Ответ

31 голосов
/ 07 апреля 2011

Когда ваш .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'
...