У вас в таком варианте никогда не отработает "apt -f install". Штука в том, что после "dpkg -i" код возврата не ноль. В данном случае лучше попробовать без условного выполнения, либо заменить "&&" на "||". Тогда "apt -f install" будет выполняться после безуспешной установки пакета с помощью dpkg (что в вашем случае и происходит).
Должно быть что-то типа такого:
install_timeshift(){
wget "https://.../...deb" && [ -f "...deb" ] && { dpkg -i ....deb || apt -f install; }
}
Качаем, потом проверяем, есть ли файл, потом, если файл есть, устанавливаем его при помощи dpkg, и (если код возврата не ноль, что автоматом значит, что была ошибка) пытаемся устанавливать зависимости.
Пример как это работает:
$ touch file && [ -f file ] && { test -d whatever || echo 'apt -f install called'; }
apt -f install called
$ rm file
$ touch file1 && [ -f file ] && { test -d whatever || echo 'apt -f install called'; }
$ touch file1 && [ -f file ] && { test -d whatever || echo 'apt -f install called'; } || echo 'no file downloaded'
no file downloaded
$