apt-get ошибка убивает мою функцию Bash
Вопрос
Я пытаюсь написать простую функцию для моего .bashrc, чтобы упростить общую проблему, которая у меня есть:
$ sudo apt-get install nltk
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package nltk
$ apt-cache search nltk
python-nltk - Python libraries for natural language processing
$ sudo apt-get install python-nltk
Итак, я написал это:
function sagi(){
sudo apt-get install $1 || apt-cache search $1
}
Но что бы я ни делал, после apt-get install
Часть запускается и ошибается, потому что он не может найти пакет, который я просил, функция полностью выходит. Я даже пытался сделать это:
function sagi(){
sudo apt-get install $1
echo $1
}
Опять же, ничего после неудачных запуска APT-GET. Как ни странно, когда я бегаю:
$ sudo apt-get install nltk || apt-cache search nltk
(в подсказке Bash) Все работает, как и ожидалось. Что я делаю не так?
РЕДАКТИРОВАТЬ: Функция находится в конце моего файла .BASHRC и показана полностью выше. Я проверил, и мой .bashrc не использует set
куда угодно. (Я изначально подозревал, что set -e
может быть виновником). Нет ловушек, и код ошибки из $? 100.
Решение
Это на самом деле не решение, а предложение по улучшению.
function sagi() {
sudo apt-get -qq --dry-run install $1
if [ $? == 100 ]; then
sudo apt-cache search $1
else
sudo apt-get install $1
fi
}
Это принесет вам более чистый и более надежный способ сделать то, что вы хотите. Сначала он проверяет, находится ли этот пакет в репозиториях, сначала выполняя сухой прогон. После этого он проверяет, является ли код ошибки 100 (не удастся из -за не найденной пакета) и вызывая поиск кэша, если это так, иначе он просто устанавливает пакет.