Git 有没有办法让别名包含$(!!)并在其';跑什么?
或者一个函数,或者其他任何东西 我的用例是,我运行一个命令,该命令将在git存储库中为我找到一个分支名称,该命令的唯一输出是该分支名称,可通过Git 有没有办法让别名包含$(!!)并在其';跑什么?,git,bash,Git,Bash,或者一个函数,或者其他任何东西 我的用例是,我运行一个命令,该命令将在git存储库中为我找到一个分支名称,该命令的唯一输出是该分支名称,可通过git checkout。然后我键入git checkout$(!!)以实际执行签出。我想要的是git checkout$(!!)的别名(不管它是否是“真实的”别名) 我不希望使用单个命令来查找分支并将其签出,因为我用于查找分支的命令可能会输出多个分支名称,在这种情况下,我会使用更具体的参数重新运行它。(它是git branch-r | cut-d'/'-
git checkout
。然后我键入git checkout$(!!)
以实际执行签出。我想要的是git checkout$(!!)
的别名(不管它是否是“真实的”别名)
我不希望使用单个命令来查找分支并将其签出,因为我用于查找分支的命令可能会输出多个分支名称,在这种情况下,我会使用更具体的参数重新运行它。(它是git branch-r | cut-d'/'-f2-| grep的别名)内置的fc
提取(默认情况下,允许您编辑)bash历史中的上一个命令。使用fc-nl-1-1
返回上一个命令(作为标准输出)。因此:
再次执行命令
执行刚才执行的操作,就像代码>。稍微修改一下,我们得到(修复,来自R.Woods):
这应该会起作用(我没有测试过)。请注意,这是而且必须是一个bash别名,而不是Git别名:Git无法访问shell的历史记录(除了读取文件,但不能保证它是最新的,或者我应该说,至少从我刚刚检查的bash文档来看,不能保证它是最新的)。内置摘录(默认情况下,允许您编辑)bash历史记录中的上一个命令。使用fc-nl-1-1
返回上一个命令(作为标准输出)。因此:
再次执行命令
执行您刚才再次执行的操作,就像!!
。稍微修改一下,我们得到(修复,来自R.Woods):
注意,这是而且必须是一个bash别名,而不是Git别名:Git无法访问shell的历史记录(除非通过读取文件,但这不能保证是最新的,或者我应该说,至少从我刚刚检查的bash文档来看,这不能保证是最新的).Soeval git checkout$(fc-nl-1-1)
给了我pathspec错误,因为$(fc)正在扩展到给出分支名称的命令。如果我在第二个$()或backticks中包装它,我会得到一个错误,说“找不到命令分支grep”(分支grep是我问题中提到的别名)。似乎有什么东西阻止了子shell评估别名?编辑:没关系--git checkout$(eval$(fc-nl-1-1))
成功了。@R.Woods:啊,好吧,我会更新答案。eval的位置总是有点棘手!所以eval git checkout$(fc-nl-1-1)
会给我路径规范错误,因为$(fc)正在扩展到提供分支名称的命令。如果我将其包装在第二个$()或倒勾中,我会收到一个错误,说“找不到命令分支grep”(分支grep是我问题中提到的别名)。似乎有什么东西阻止子shell计算别名?编辑:没关系--git checkout$(eval$(fc-nl-1-1))
成功了。@R.Woods:啊,好吧,我会更新答案。eval的位置总是有点棘手!
alias again='eval $(fc -nl -1 -1)'
alias xxx='git checkout $(eval $(fc -nl -1 -1))'