2017-02-09 8 views
0

Я пытаюсь создать псевдоним, который проходит через несколько папок и запускает команду сборки, но я продолжаю получать вывод, который отображает только for >.Как включить петлю в псевдоним bash

Это функция, которая у меня есть в моем .zshrc файле

recurse_build() { 
    for src in `ls`; do 
     cd $src; build; cd .. 
    done 
} 

И я пытаюсь сделать псевдоним

alias br='recurse_build' 

, но я в конечном итоге следующий запрос

for > 

Любая помощь будет оценена по достоинству.

Редактировать: исправлена ​​ошибка синтаксиса в функции. Был неправильный случай ввода вместо копирования вставки

+0

Почему бы вам просто не использовать функцию вместо псевдонима? Кстати, у вас есть синтаксическая ошибка в функции. – janos

+0

Зачем вам определять функцию и сопоставлять ее с псевдонимом? Используйте функцию all напрямую – Inian

+0

Ваше определение функции нарушено (как в настоящее время опубликовано); проанализируйте его на [shellcheck.net] (http://shellcheck.net). – mklement0

ответ

3

Помимо недостающего backquote на вашей подстановке команд, это неправильный способ перебора файлов в любом случае. Используйте шаблон глобуса.

recurse_build() { 
    for src in */; do 
     pushd "$src" || continue # Don't do anything if pushd fails 
     build 
     popd 
    done 
} 

Использование pushd и popd немного чище, чем того, чтобы вспомнить, где вернуться.

+0

Исправлен недостающий backquote, и я не знал об этом пути для перебора файлов в bash. Я просто попробовал синтаксис, который вы предложили, но я все еще получаю приглашение 'for>' вместо того, чтобы фактически создать его. Позвольте мне посмотреть, могу ли я немного отладить его. Edit: rant он функционирует напрямую и, похоже, работает. Это не работает в псевдониме, но я могу справиться с просто вызовом функции. – jabbajac

1

Вероятно, недостающий обратный ход справа, но обработка выходного сигнала ls - это, как правило, плохая идея. Это работает

recurse_build(){ 
    for src in */; do 
     cd "$src" && ./build && cd .. 
    done 
} 

#TEST 
mkdir -p a b c 
echo 'echo $PWD:$0' |tee a/build b/build c/build >/dev/null 
chmod +x a/build b/build c/build 


recurse_build