2

Каждый раз, когда я делаю 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 ответ1

3

Такие вещи, как command или sudo магически не относятся к остальной части строки. (Только # комментариев и встроенное time обладают такой магией.)

То есть, если вы используете command clear && git diff , она сначала расширяется до двух отдельных команд: command clear (где префикс "command" бесполезен) и 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 или что-то подобное.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .