Псевдоним / функция Bash для каждого «git diff» с «clear»

275
Bugs Bunny

Каждый раз, когда я делаю, git diffя бы хотел, чтобы clear & git diffвместо этого мой bash делал .

Я попытался настроить ответ в « Bash: Пробелы в псевдониме », например:

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

Но, к сожалению, это не работает (командная строка заканчивается неким бесконечным циклом, переключающимся между bashи gitнавсегда, и мне нужно [CTRL|CMD]+Cот него отказаться ).

1

1 ответ на вопрос

2
grawity

Такие вещи, как 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.)