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

Linux 如何在git或shell别名中使用'find-exec sh-c',linux,git,bash,shell,Linux,Git,Bash,Shell,我将以下内容用作git shell脚本 !/垃圾箱/垃圾箱 [-z$1]&&dir=$PWD | | dir=$1 查找$dir-mindepth 1-maxdepth 1-type d-exec sh-c' 为了我;做 printf\n%s\n$i cd$i\ &&git远程更新 完成{}+ 但希望使用git别名 rmup=!sh-c查找-mindepth 1-maxdepth 1-类型d-执行器sh-c'\ 为了我;做\ printf\n%s\n$i&&cd$i&&git远程更新\ 完成{}

我将以下内容用作git shell脚本

!/垃圾箱/垃圾箱 [-z$1]&&dir=$PWD | | dir=$1 查找$dir-mindepth 1-maxdepth 1-type d-exec sh-c' 为了我;做 printf\n%s\n$i cd$i\ &&git远程更新 完成{}+ 但希望使用git别名

rmup=!sh-c查找-mindepth 1-maxdepth 1-类型d-执行器sh-c'\ 为了我;做\ printf\n%s\n$i&&cd$i&&git远程更新\ 完成{}+ 或者至少是一个shell别名

别名rmup=find-mindepth 1-maxdepth 1-类型d-执行器sh-c'\ 为了我;做\ printf\n%s\n$i&&cd$i&&git远程更新\ 完成{}+ 我尝试过各种类型的转义,单引号和双引号组合,但没有成功


希望使用嵌入式别名的原因是为了简化机器之间的维护和可移植性,因为我已经同步了.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 {} +
    }

不要使用shell别名,除非您必须使用;外壳功能在功能上优越

rmup() {
  local dir=${1:-$PWD}
  find "$dir" -mindepth 1 -maxdepth 1 -type d -exec sh -c '
    for i; do
      printf "\n%s\n" "$i"
      (cd "$i" && exec git remote update)
    done' _ {} +
}
特别是,您不能在别名中替换位置参数,这里的代码明确需要这样做。现在,您可以扩展到一些东西,然后查看它的位置参数,但是该技术可用的情况集是。。。明显受限,因为我不想在这里讨论的原因


用法与别名的用法完全相同:rmup参数

除非您必须使用shell别名,否则不要使用shell别名;外壳功能在功能上优越

rmup() {
  local dir=${1:-$PWD}
  find "$dir" -mindepth 1 -maxdepth 1 -type d -exec sh -c '
    for i; do
      printf "\n%s\n" "$i"
      (cd "$i" && exec git remote update)
    done' _ {} +
}
特别是,您不能在别名中替换位置参数,这里的代码明确需要这样做。现在,您可以扩展到一些东西,然后查看它的位置参数,但是该技术可用的情况集是。。。明显受限,因为我不想在这里讨论的原因



用法与别名的用法完全相同:rmup参数

如果您已经有shell脚本,则将其命名为git rmup,将其放入$PATH中,您将能够像调用git别名一样调用git rmup。

如果您已经有shell脚本,则将其命名为git rmup,将它放在$PATH中,就可以像调用git别名一样调用git rmup。

如果您已经有一个工作的shell脚本,为什么需要shell别名?为什么要使用shell别名而不是shell函数?如果您已经有一个工作的shell脚本,为什么需要shell别名?为什么要使用shell别名而不是shell函数?我尝试了shell函数,但在解析当前目录时遇到了一些奇怪的错误。我会更新问题。看看你是否能用当前发布的版本重现这些问题。:。。。顺便说一句,为了解释为什么它有问题,请注意您是如何使用的。而不是将$PWD作为默认值。想一想当你cd./src/foo,然后cd./src/bar时会发生什么;尝试转到./src/foo/src/bar,如果该目录不存在…@go2null,…那么问题的根源不是它是一个函数;是你写的和你写剧本的方式有微妙的不同。谢谢,就是这样。这就是我在shell脚本中的内容。然而,我是硬编码的。点作为别名中的当前目录,这不起作用。我尝试了shell函数,但在解析当前目录时遇到了一些奇怪的错误。我会更新问题。看看你是否能用当前发布的版本重现这些问题。:。。。顺便说一句,为了解释为什么它有问题,请注意您是如何使用的。而不是将$PWD作为默认值。想一想当你cd./src/foo,然后cd./src/bar时会发生什么;尝试转到./src/foo/src/bar,如果该目录不存在…@go2null,…那么问题的根源不是它是一个函数;是你写的和你写剧本的方式有微妙的不同。谢谢,就是这样。这就是我在shell脚本中的内容。然而,我是硬编码的。点作为别名中的当前目录,但这不起作用。希望使用嵌入式别名的原因是为了简化机器之间的维护和可移植性,因为我已经同步了.gitconfig和.bashrc。一旦您了解了在Git配置文件中引用字符串的确切规则,我想你不会再谈论“简化维护”了;-。对其他配置文件旁边的脚本/目录进行版本管理/同步会简单得多。@MatthieuMoys-两年后,同步我的整个点文件就是我现在的位置:-希望使用嵌入式别名的原因是为了简化机器之间的维护和可移植性,因为我已经同步了.gitconfig和.bashrc
在Git的配置文件中引用字符串的xact规则,我想您不会再谈论“简化维护”了;-。对其他配置文件旁边的脚本/目录进行版本管理/同步会简单得多。@MatthieuMoys-两年后,同步我的整个点文件就是我现在的位置:-