Вопрос

Я пытаюсь написать простую функцию для моего .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 (не удастся из -за не найденной пакета) и вызывая поиск кэша, если это так, иначе он просто устанавливает пакет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top