代码之家  ›  专栏  ›  技术社区  ›  halpdoge

bash_配置文件中的别名自行执行

  •  2
  • halpdoge  · 技术社区  · 7 年前

    我在~/中设置了一个别名。bash\u配置文件如下:

    alias lcmt="git show $(git log --oneline | awk '{print $1;}' | head -n 1)"

    然而,每当我打开终端窗口时,我都会看到:

    fatal: Not a git repository (or any of the parent directories): .git

    我已经能够将其缩小到特定的别名,因为当我注释它时,没有错误消息。为什么它会在OS X上自行评估?我能阻止它这样做吗?

    2 回复  |  直到 7 年前
        1
  •  6
  •   janos slartidan    7 年前

    这个 $(...) 在双引号表达式中,在赋值时执行别名的创建。你可以通过逃避 $ $(...) . 你也要为 $1 内部 awk 命令:

    alias lcmt="git show \$(git log --oneline | awk '{print \$1}' | head -n 1)"
    
        2
  •  4
  •   Gordon Davisson    7 年前

    Shell函数在许多方面都优于别名,包括没有像别名那样的引用奇怪。定义一个shell函数来实现这一点很容易:

    lcmd() { git show $(git log --oneline | awk '{print $1;}' | head -n 1); }
    

    不过,我还有另外两条建议:在 $( ) 表达式,并具有 awk

    lcmd() { git show "$(git log --oneline | awk '{print $1; exit}')"; }