Звучит хрупко - вместо git foo
можно было набрать foo
, а потом в один прекрасный день появляется новая команда foo
и foo
больше не вызывает git foo
- но это можно сделать. Когда команда не найдена с обычным поиском (псевдоним, функция, builtin, исполняемая на PATH
), zsh вызывает функцию command_not_found_handler
(если она определена). В качестве аргументов эта функция получает команду и аргументы команды.
command_not_found_handler () {
git "$@"
}
Если вы хотите выполнить более интенсивную фильтрацию, команда находится в $1
, а ее аргументы можно назвать "$@[2,$#]"
.
command_not_found_handler () {
if …; then
git "$1" "$@[2,$#]"
fi
}
Самый простой способ:find
.
Самый простой способ (самый простой смысл, никаких дополнительных инструментов для установки, простота ввода )— это сохранить список всех файлов до и после установки, а затем сравнить списки.
Вы можете ввести
find / -xdev \( -name home -o -name mnt -o -name proc --o -name dev o -name sys \) -prune -o -print | sort > /root/files-before-install
Затем установите программу и
find / -xdev \( -name home -o -name mnt -o -name proc -o -name dev -o -name sys \) -prune -o -print | sort > /root/files-after-install
(обратите внимание на другое имя файла в конце)
После этого вы можете сравнить файлы следующим образом:
diff /root/files-before-install /root/files-after-install
Это покажет вам только новые файлы, а не измененные файлы. -Это было бы намного сложнее обнаружить. Существует также ненулевая -вероятность того, что ваша программа установки создаст файл или каталог с именем «home», «mnt», «sys», «proc» или «dev», которые мы бы проигнорировали, но шансы для этого довольно низко, на мой взгляд.
Checkinstall работает точно так же, как вы описываете :, он отслеживает изменения файловой системы, выполняемые процессом установки, и предоставляет способ их отката.
Существуют способы превратить стенограмму установки в обычный пакет для ряда платформ (.deb
, RPM и т. д. ), но этот инструмент полезен, даже если вы этого не хотите или ваш менеджер пакетов не т напрямую поддерживается.