#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! Спасибо, Жиль!