[Примечание. Я решил проблему, с которой столкнулся, используя функцию bash, но я хочу понять, почему моя первоначальная попытка не сработала.]bash - как * интерпретируется в псевдонимах?
Я запускаю git в Windows и использую приложение командной строки Git Bash для управления репозиториями. У меня есть несколько репозиториев, которые я часто хочу вытащить сразу. Раньше я делал это, введя в командной строке:
for i in *; do cd $i; git pull --rebase; cd ..; done;
Чтобы сэкономить время, я решил создать псевдоним для этого. Итак, я создал файл .bashrc в домашнем каталоге (C:/мерзавец в моем случае) и добавил строку
alias pr="for i in *; do cd $i; git pull --rebase; cd ..; done;"
Однако, это не работает вообще, выход был
sh.exe" cd: /etc/profile.d/*.sh: No such file or directory
, за которым следует git, жалуясь, что он не находится в репозитории. Результат будет повторяться более 20 раз для одного вызова. Корень файловой системы MinGW, где происходит из/etc выше, - это то, где я установил git в (C:/Program Files (x86)/Git).
Теперь я решил эту проблему, в конце концов, создав функцию в моем файле .bashrc вместо этого, например, так:
pr(){
for i in *
do
cd $i
git pull --rebase
cd ..
done
}
Итак, моя проблема решена, но я хочу, чтобы понять, почему мой первоначальный подход не работает. Очевидно, что-то в псевдонимах, которые я не понимаю, это, по-видимому, искажение бит «i in *». Мое предположение состояло в том, что bash заменит строку картами псевдонимов, а затем оценит ее, но это, похоже, не так просто.
Что произойдет, если вы добавите 'echo 'i = $ i" 'прямо перед назначением и переименованием' pr'? – BroSlow
Кроме того, вы, вероятно, захотите сделать его короткозамкнутым условным 'cd '$ i" && git pull --rebase && cd ..'. В противном случае вы можете получить некоторые странные результаты ('$ i' не является каталогом, но вы все еще запускаете' git' и поднимаетесь на уровень и т. Д.) – BroSlow
Возможный дубликат команды [bash alias с одиночными и двойными кавычками] (http://stackoverflow.com/questions/20111063/bash-alias-command-with-both-single-and-double-quotes) – tripleee