Если вы хотите работать с $ ?, вам нужно проверять его после каждой команды, так как $? обновляется после выхода каждой команды. Это означает, что если вы выполните конвейер, вы получите только код завершения последнего процесса в конвейере.
Другой подход заключается в том, чтобы сделать это:
set -e
set -o pipefail
Если вы поместите это наверху сценария оболочки, похоже, bash позаботится об этом за вас. Как отмечалось в предыдущем постере, "set -e" приведет к выходу bash с ошибкой в любой простой команде. «set -o pipefail» приведет к выходу bash с ошибкой и для любой команды в конвейере.
См. здесь или здесь для более подробного обсуждения этой проблемы. Здесь - раздел руководства по bash для встроенного набора.
Вы можете запустить apt-get в режиме имитации, например:
с
sudo apt-get --simulate install foo bar baz
или без sudo
также
apt-get --simulate install foo bar baz
Это не будет измените что-нибудь в своей системе, но распечатаете, что будет делать apt-get при выполнении этой команды.
Вы, вероятно, ищете дополнительную отладку. Проблема в том, что ... информация слишком большая, чтобы быть полезной для любого, кто не знает, что он читает. Но вот оно:
sudo apt-get -o Debug::pkgDPkgProgressReporting=true -o Debug::pkgPackageManager=true -o Debug::pkgDPkgPM=true install package
Но, эй, есть множество других способов сделать это. Например:
apt-get --print-uris install package
## This will print a lot of url. Download them.
wget uris
dpkg-deb -c *.deb
Это покажет вам содержимое. Вам нужно будет оценить управляющие сценарии (post / pre inst / rm) отдельно.
dpkg --no-act some-1.0.deb
, но снова, это было бы больше информации, которая действительно полезна
– Strauss
03.05.2020, 13:41