Скажем, у меня есть команда git branch
(всегда с парой слов), например.
Я хочу отслеживать, когда эта команда выполняется с аргументами. Например, если я выполню команду git branch develop
без ошибок, я хочу сохранить develop
файл.
Я попытался переписать команду git на моем .bash_profile
, что-то вроде этого:
git () {
if [ $# -eq 3 ]
then
git $@
echo $2 > /path/tacked_parameters.txt
else
git $@
fi
}
Но, похоже, это не работает хорошо. Есть какой-либо способ сделать это?
Ответы:
У вас есть несколько проблем здесь:
git
функция вызывает себя рекурсивно вместо исходнойgit
команды.$@
кавычек, что не имеет никакого смысла вообщеecho
для произвольных данных .git
команды.~/.bash_profile
который предназначен для настройки сеанса входа в систему, а не оболочки, и обычно не читается при вызовах, не связанных сbash
входом в систему .Вы хотели бы что-то вроде:
Это:
command
для запускаgit
команды ,git
в локальной переменной и вернуть его при выходе,>>
вместо>
перенаправления в файл журнала.printf
вместоecho
.~/.bashrc
вместо этого поместите это в свой (убедитесь, что ваш~/.bash_profile
источник в~/.bashrc
качествеbash
оболочек входа в систему не читается~/.bashrc
по умолчанию (bash
ошибка / ошибка)). Если вы не хотите экспортировать этуgit
функцию (сexport -f git
) в случае, если вам также нужныbash
скрипты, которыеgit
вызывают эту функцию.источник
[ "$#" -eq 2 ]
, в соответствии с его примером. И это может быть хорошей идеей, чтобы также добавить дату в «tacked_parameters.txt». И я бы пошел для общего случая (то есть, не просто отслеживать 2-ые параметры, когда 2 параметра, но отслеживать любые параметры): я бы избавился от if и имелprintf '%s: %s\n' "$(date '+%Y-%m-%dT%H:%M:%S')" "$0 $*"
:? (т.е. покажите команду + все параметры (обратите внимание, что вы все еще теряете некоторую информацию, например, какой параметр имеет внутри-разделители, если есть). Переносимая дата, близкая к стандарту iso8601)