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_keepgit status --porcelain

4

1 回答 1

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标志一样,该程序将无法正确处理包含空格的文件名。

于 2013-03-20T23:00:30.007 回答