Другая опция состояла бы в том, чтобы включить цвета и использование 'меньше-r' как Ваш пейджер.
git config --global color.ui true
git config --global core.pager 'less -r'
Это приводит к
[color]
ui = true
[core]
pager = less -r
в Вашем ~/.gitconfig
Для получения дополнительной информации посмотрите Pro книга Мерзавца.
command
встроенные силы название команды, которое будет интерпретироваться как встроенная или внешняя команда (пропускающий псевдоним и функциональный поиск). Это доступно во всех оболочках POSIX включая удар.
cd () { command cd "$@" && pushd "$@"; }
(Обратите внимание, что этим примером является плохой: это не работает с относительными путями, и Вы могли бы также просто ввести pushd
во-первых.)
В ударе и zsh (но не ksh), можно использовать builtin
вынудить название команды интерпретироваться как встроенное, исключая псевдонимы, функции и внешние команды.
Bash имеет (встроенную) команду builtin
, который делает точно, в чем Вы нуждаетесь. Замена cd
с builtin cd
в Вашей функции зафиксирует рекурсию.
Чтобы это работало с относительными путями, потребуется следующее:
function cd {
dir="$(realpath "$@")"
command cd "$dir"
pushd "$dir"
}
Предполагается, что вы используете достаточно современный дистрибутив Linux, который содержит утилиту 'realpath'. (RHEL 6, например, не поддерживает ). Если доступен Perl, 'realpath' можно смоделировать, используя:
! realpath $(pwd) > /dev/null 2>&1 && function realpath {
perl -e "use Cwd realpath; print realpath(\"$1\"). \"\\n\";"
}
Я подозреваю, что когда вы говорите, что «не хотите переименовывать свою функцию во что-либо другое», вы имеете в виду, что хотите иметь возможность вызывать свою функцию под тем же именем, что и исходная команда.
Таким образом, еще один способ сделать это, который также работает для вещей, которые не встроены -в ins, состоит в том, чтобы назвать вашу функцию как-то иначе, а затем определить псевдоним для обернутой команды. Это работает, потому что псевдоним не существует в контексте выполнения вашей функции.
Пример файла wrapper.sh:
#!/bin/bash
function my_wrapper() { wrapped_program $@ && dostuff }
И в, например,.bash _псевдонимах:
source /path/to/wrapper.sh
alias wrapped_program="my_wrapper"
Но это довольно банально. Использование command
предпочтительнее, когда это возможно.