Bash 别名/函数在每个“git diff”前面加上“clear”

Bash 别名/函数在每个“git diff”前面加上“clear”

每次我这样做的时候git diff我都希望我的 bash 能够做到clear & git diff这一点。

我尝试调整答案“Bash:别名中的空格“ 像这样:

git() {
    if [[ $@ == "diff" ]]; then
        command clear && git diff
    else
        command git "$@"
    fi
}

但不幸的是,这不起作用(命令行最终陷入了一种在bash和之间git永远切换的无限循环,我需要[CTRL|CMD]+C摆脱它)。

答案1

command或之类的东西sudo不会神奇地应用于该行的其余部分。(只有#注释和time内置命令才有这样的魔力。)

也就是说,如果您使用command clear && git diff,它首先会扩展为两个单独的命令:(command clear其中“命令”前缀无用)和git diff(需要它的地方)。

正确的功能应该是:

git() {
    if [[ $1 == "diff" ]]; then
        clear && command git "$@"
    else
        command git "$@"
    fi
}

或者:

git() {
    if [[ $1 == diff ]]; then
        clear
    fi
    command git "$@"
}

"$@"(在两种情况下都使用,因为您可能有一天会需要git diff --cached或诸如此类。)

相关内容