2013-03-20 1 views
1

Я пытаюсь написать простую функцию, которая позволит мне интерактивно отключать файлы от Git. Вот то, что я до сих пор:Как передать каждое имя файла моей функции?

reset_or_keep() { 
    echo "Received $1" 
} 

interactive_reset() { 
    local mods= 
    mods=`git status --porcelain | sed -e "s/^[A-Z][ \t]*//g" | xargs reset_or_keep` 
} 

Однако, я получаю эту ошибку:

xargs: reset_or_keep: No such file or directory 

Я хотел бы, что reset_or_keep вызывается один раз для каждой записи в git status --porcelain

+2

Я думаю, что это может вам помочь: http://stackoverflow.com/questions/11003418/calling-functions-with-xargs-within-a-bash-script – fedorqui

ответ

3

Самый простой способ заключается в эффективно переоценить xargs непосредственно в bash, используя read:

#!/bin/sh 

reset_or_keep() { 
    echo "Received $1" 
} 

handle_files() { 
    while read filename ; do 
     reset_or_keep "$filename" 
    done 
} 

git status --porcelain | sed -e "s/^[ \t]*[A-Z][ \t]*//g" | handle_files 

(Обратите внимание, что я должен был сделать небольшие изменения в вашем sed выражения для обработки формат вывода из моих git status.)

Имейте в виду, что, как и с xargs без -0 флага, эта программа не будет корректно работать с файлом имена, содержащие пробелы.