有没有办法让别名包含$(!!)在运行时展开?

时间:2017-06-06 22:25:59

标签: git bash

或者功能,或其他任何事情。

我的用例是我运行的命令会在git存储库中为我找到分支名称,命令的唯一输出是分支名称,可以传递给git checkout。然后我键入git checkout $(!!)以实际执行结帐。我想要的是一个别名(不关心它是否是alias对于git checkout $(!!)实际有效。

我不希望单个命令找到分支并将其检出,因为我用来查找分支的命令可能会输出多个分支名称,在这种情况下,我会使用更具体的参数重新运行它。 (它是git branch -r | cut -d '/' -f 2- | grep的别名。)

1 个答案:

答案 0 :(得分:2)

{b}历史记录中的fc内置数据提取(默认情况下,允许您编辑)上一个命令。使用fc -nl -1 -1获取前一个命令(作为标准输出)。因此:

alias again='eval $(fc -nl -1 -1)'

使命令again做你刚才做的任何事情,就像!!一样。稍微修改一下,我们得到(修复,来自R. Woods):

alias xxx='git checkout $(eval $(fc -nl -1 -1))'

应该做的伎俩(不是我测试过的。)请注意,这是,而且必须是bash别名,而不是Git别名:Git无法访问shell&# 39; s历史(除了通过阅读文件,但不保证是最新的 - 或者我应该说,保证是最新的,至少从bash文档我刚检查过。