У меня была аналогичная проблема:
dpkg: dependency problems prevent removal of libefl:
evas-loaders depends on libefl.
dpkg: error processing package libefl (--remove):
dependency problems - not removing
Errors were encountered while processing:
libefl
Отключение PPA просвещения исправило ее для меня.
Я думаю, что то, что вы пытаетесь выполнить, очень сложно, если не невозможно, даже когда вы можете создать функцию-оболочку, чтобы делать то, что вы хотите, и псевдоним для вызова оболочки вместо реальной команды, все идет не так, потому что обычно вы запустите sudo pacman -S
и sudo разбивает все функции и псевдонимы, переключая контексты.
Но не все потеряно, вы можете перечислить все пакеты, явно установленные с помощью pacman -Qe
, поэтому, если в любой момент вы захотите переустановить систему или скопировать среду на другой компьютер, вы можете получить список в файл, перенесите файл на целевую машину и запустите pacman, чтобы установить все пакеты.
Чтобы создать файл:
pacman -Qe | cut -d ' ' -f 1 | tr "\n" " " >the-file.txt
pacman -Qe
: перечисляет все явно установленные пакеты. cut -d '' -f 1
: удалить версии пакета и оставить только имена. tr "\ n" ""
: заменить символы новой строки на пробелы. > the-file.txt
: предназначен для перенаправления вывода в файл, не стесняйтесь изменять имя файла и путь по своему усмотрению. Это выведет список, разделенный пробелами, в файл-file.txt, затем вы передадите файл на целевую машину и запустите:
sudo pacman -Sy - <the-file.txt
Вуаля, pacman устанавливает все пакеты из списка, и вы получите тот же результат.
Вы также можете добавить аргумент - необходимый
в pacman, чтобы он не переустанавливал обновленные пакеты pacman -S --needed ...
.
И если вы делаете новую машину удаленно, вы можете пропустить передачу файла и просто передать результаты по ssh, и они будут перенесены на удаленную машину:
pacman -Qe | cut -d ' ' -f 1 | tr "\n" " " | ssh -t user@host "sudo pacman -S --needed -"
-t
ssh выделяет псевдотерминал, иначе sudo не сработает. Удачи.
Если вы используете bash
:
trap `echo $BASH_COMMAND | fgrep "pacman - S" >> /home/logfile
Вам также понадобится это в вашем .bash_profile
или подобном, чтобы оно запускалось для каждой интерактивной оболочки.
Разумеется, это фиксирует только то, что вы набрали в bash
, а не то, что было выполнено каким-то другим способом, например, внешним, выполняющим pacman
в фоновом режиме.
Имейте в виду, что это может сильно снизить производительность (выполнение fgrep
для каждой другой выполняемой команды), поэтому, хотя это и отвечает на ваш вопрос, это не обязательно лучший способ достижения вашей цели - отслеживания пакетов.
См. также: https://superuser.com/q/175799
Если вы используете zsh
, поищите функцию preexec
в руководстве zsh
.