如何在git或shell别名中使用`find -exec sh -c`

时间:2015-05-23 01:33:46

标签: linux git bash shell

我使用以下作为git shell脚本。

    #!/bin/sh

    [ -z "$1" ] && dir="$PWD" || dir="$1"

    find "$dir" -mindepth 1 -maxdepth 1 -type d -exec sh -c '
        for i; do
            printf "\n%s\n" "$i"
            cd "$i" \
            && git remote update
        done' sh {} +

但是想使用git别名。

    rmup=!sh -c "find . -mindepth 1 -maxdepth 1 -type d -exec sh -c '\
        for i; do \
            printf "\n%s\n" "$i" && cd "$i" && git remote update; \
        done' sh {} +"

或至少是一个shell别名。

    alias rmup="find . -mindepth 1 -maxdepth 1 -type d -exec sh -c '\
        for i; do \
            printf "\n%s\n" "$i" && cd "$i" && git remote update; \
        done' sh {} +"

我尝试过所有类型的转义,单引号和双引号组合,但没有成功。

想要使用" embedded"别名是为了简化机器之间的维护和可移植性,因为我已经在同步.gitconfig.bashrc

忘记提到我也尝试过shell函数,当printf打印目录时,cd会抱怨该目录不存在。

    rmup() {
        find . -mindepth 1 -maxdepth 1 -type d -exec sh -c '
            for i; do
               printf "\n%s\n" "$i" && cd "$i" && git remote update;
            done' sh {} +
    }

2 个答案:

答案 0 :(得分:3)

如果您已经拥有shell脚本,请将其命名为git-rmup,将其放入$PATH,然后您就可以调用git rmup,就好像它是Git别名。

答案 1 :(得分:1)

除非你绝对必须,否则不要使用shell别名; shell功能在功能上更胜一筹。

rmup argument

特别是,你不能在别名中替换位置参数,这里你的代码明确需要这样做。 (现在,你可以扩展到一些东西然后查看它的位置参数,但是这种技术可用的案例集......受到很大限制,原因我不想进入这里)。

用法与别名的用法完全相同:{{1}}