Запускать git fetch после любой команды cd

Вместо использования команды tail используйте awk для получения идеального вывода.

Last = tail -F "$FILE"  ===>  Last=$(awk '/./{line=$0} END{print line}' $FILE)
1
18.11.2018, 16:05
1 ответ

Можно использовать функцию:

function cd() {
    builtin cd "$@"
    if [[ -d .git ]]; then
        git fetch &
    fi
}

Добавьте это в файл запуска вашей оболочки.

Здесь происходит несколько вещей:

  1. Сначала мы используем функцию cd() { для переопределения встроенного cd поведения с нашим собственным кодом.
  2. Очевидно, что мы все еще хотим изменить каталог, поэтому сначала делаем это - префикс builtin*, чтобы оболочка использовала встроенный cd вместо рекурсивного вызова нашей пользовательской функции cd(), и предоставляем ей $@ в качестве аргументов, которые оболочка расширит до всех аргументов, предоставленных функции.
  3. Мы проверяем, находимся ли мы в git-репозитории^, проверяя, существует ли каталог .git, и если существует, запускаем git fetch, сообщая оболочке, чтобы она поместила его в фоновый режим, добавляя &.

Обратите внимание, что вывод git fetch все еще будет отправлен на терминал. Если вы хотите отбросить его, вы можете использовать следующее:

git fetch & 2>&1 >/dev/null

Это перенаправляет stderr в stdout, а затем отправляет stdout в /dev/null.

[*]: Обратите внимание, что builtin отсутствует в POSIX, и поэтому это решение не переносится на все оболочки

[^]: Это не сработает, если git-репозиторий пустой, но почти наверняка у вас на диске не будет пустого репозитория, так что кому какое дело

0
27.01.2020, 23:47

Теги

Похожие вопросы