【问题标题】:Create multi-word alias in bash?在bash中创建多字别名?
【发布时间】:2012-04-16 06:26:40
【问题描述】:

我想在 bash 中创建一个别名,这样

git diff somefile

变成

git diff --color somefile

但我不想定义自己的自定义别名,例如

alias gitd = "git diff --color"

因为如果我习惯了这些自定义别名,我就会失去在没有这些映射的机器上工作的能力。

编辑:看来 bash 不允许多字别名。除了创建别名之外,还有其他替代解决方案吗?

【问题讨论】:

  • 我认为不可能...

标签: git bash


【解决方案1】:

要为命令创建更智能的别名,您必须编写一个与该命令同名的包装函数,它会分析参数、转换它们,然后使用转换后的参数调用真正的命令。

例如,您的git 函数可以识别出正在调用diff,并在其中插入--color 参数。

代码:

# in your ~/.bash_profile

git()
{
  if [ $# -gt 0 ] && [ "$1" == "diff" ] ; then
     shift
     command git diff --color "$@"
  else
     command git "$@"
  fi
}

如果您想支持diff 之前的任何选项,并且仍然要添加--color,那么显然您必须使此解析更智能。

【讨论】:

  • 您可能想要使用command git 而不是硬编码路径。
  • 我知道有一种方法可以引用原始的外部命令,但我这辈子都不记得了。 :)
【解决方案2】:

更好的答案(针对这种特定情况)。

来自git-config 手册页:

   color.diff
       When set to always, always use colors in patch. When false (or
       never), never. When set to true or auto, use colors only when the
       output is to the terminal. Defaults to false.

不需要函数或别名。但是函数包装器方法对于任何命令都是通用的;把那张卡片藏起来。

【讨论】:

  • 再次感谢您指出这一点。我喜欢你的两个答案。但这一个非常特定于我的用例。所以选择这个作为接受的答案。
【解决方案3】:

Git 有自己的方式来指定别名 (http://git-scm.com/book/en/Git-Basics-Tips-and-Tricks#Git-Aliases)。例如:

git config --global alias.d 'diff --color'

那么你可以使用git d

【讨论】:

    【解决方案4】:

    避免在 bash 中的赋值符号周围出现空格:

    alias gitd="git diff --color"
    

    【讨论】:

      【解决方案5】:

      你找错树了。将color.diff 配置选项设置为auto

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        • 1970-01-01
        • 2014-03-17
        • 2017-09-05
        • 1970-01-01
        • 2015-12-26
        • 1970-01-01
        相关资源
        最近更新 更多