Ошибка apt-get убивает мою функцию bash - PullRequest
4 голосов
/ 07 ноября 2010

Я пытаюсь написать простую функцию для моего .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.

1 Ответ

2 голосов
/ 08 ноября 2010

Это на самом деле не решение, а предложение по улучшению.

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 (произошел сбой из-за того, что пакет не найден), и запускает поиск в кеше, в противном случае он просто устанавливает пакет.

...