Как я могу проверить наличие ошибок apt-get в bash-скрипте?

Я пишу bash-скрипт для установки программного обеспечения и обновления Ubuntu 12.04. Мне бы хотелось, чтобы скрипт мог проверять наличие ошибок apt-get, особенно во время обновления apt-get, чтобы я мог включать корректирующие команды или выходить из скрипта с сообщением. Как я могу проверить мой bash-скрипт на наличие таких ошибок?

Редактировать 21 марта: Спасибо, Тердон, за предоставление именно той информации, которая мне была нужна! Вот сценарий, который я создал вместе с вашими предложениями, чтобы проверить наличие обновлений и перепроверить, когда возникают ошибки, а затем отчитаться. Я добавлю это в более длинный скрипт, который я использую для настройки новых установок Ubuntu.


#!/bin/bash

apt-get update

if [ $? != 0 ]; 
then
    echo "That update didn't work out so well. Trying some fancy stuff..."
    sleep 3
    rm -rf /var/lib/apt/lists/* -vf
    apt-get update -f || echo "The errors have overwhelmed us, bro." && exit
fi

echo "You are all updated now, bro!"
6
задан 17.05.2020, 04:17

2 ответа

Самый простой подход должен иметь Ваш сценарий, продолжаются только если apt-get выходы правильно. Например:

sudo apt-get install BadPackageName && 
## Rest of the script goes here, it will only run
## if the previous command was succesful

, С другой стороны, выход, если какие-либо шаги перестали работать:

sudo apt-get install BadPackageName || echo "Installation failed" && exit

Это дало бы следующий вывод:

terdon@oregano ~ $ foo.sh
[sudo] password for terdon: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package BadPackageName
Installation failed

Это использует в своих интересах основную характеристику удара, и большинство (если не все) окружает:

  • &&: продолжите, только если предыдущая команда успешно выполнилась (имел статус выхода 0)
  • ||: продолжите, только если предыдущая неудавшаяся команда (имел статус выхода не 0)

Это - эквивалент записи чего-то вроде этого:

#!/usr/bin/env bash

sudo apt-get install at

## The exit status of the last command run is 
## saved automatically in the special variable $?.
## Therefore, testing if its value is 0, is testing
## whether the last command ran correctly.
if [[ $? > 0 ]]
then
    echo "The command failed, exiting."
    exit
else
    echo "The command ran succesfuly, continuing with script."
fi

Примечание, которое, если пакет уже установлен, apt-get, будет работать успешно, и статус выхода, будет 0.

12
ответ дан 17.05.2020, 04:17
  • 1
    Это - то, что я искал! Я думаю, что буду использовать, если команда, таким образом, у меня может быть обновление, попробует еще раз.Спасибо! – rghome 17.05.2020, 04:18
  • 2
    Я просто отредактировал свой вопрос дать Вам кредит и нажал галочку. Я теперь просмотрю свои предыдущие вопросы. Еще раз спасибо! – Satyendra Jaiswal 17.05.2020, 04:18

Эй может установить опции остановить Ваш сценарий как это:

set -o pipefail  # trace ERR through pipes
set -o errexit   # same as set -e : exit the script if any statement returns a non-true return value
0
ответ дан 17.05.2020, 04:18

Теги

Похожие вопросы