2013-03-20 58 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 2013-03-20 22:18:14

回答

3

每个条目的最简单方法是调用一次有效地用read直接在bash中实现xargs

#!/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标志,该程序将无法正常使用文件工作包含空格的名称。

相关问题