如何将每个文件名传递给我的函数?

时间:2013-03-20 21:47:59

标签: bash shell zsh

我正在尝试编写一个简单的函数,它允许我以交互方式取消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

我希望对git status --porcelain

中的每个条目调用一次reset_or_keep

1 个答案:

答案 0 :(得分: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一样,此程序无法正常使用包含空格的文件名。