Frage

Ich versuche, eine einfache Funktion für meine .bashrc zu schreiben, ein gemeinsames Problem zu vereinfachen, habe ich:

$ 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

So schrieb ich diese:

function sagi(){
    sudo apt-get install $1 || apt-cache search $1
}

Aber egal was ich tue, nach den apt-get install Teil Läufen und Fehlern, weil es das Paket nicht finden können, ich gefragt habe, vollständig die Funktion beendet. Ich habe sogar versucht dies zu tun:

function sagi(){
    sudo apt-get install $1
    echo $1
}

Wieder nichts nach dem gescheiterten-apt bekommen läuft. Merkwürdigerweise, wenn ich laufen:

$ sudo apt-get install nltk || apt-cache search nltk

(an der Bash-Eingabeaufforderung) alles funktioniert wie erwartet. Was mache ich falsch?


Edit: Die Funktion ist am Ende meiner .bashrc, und ist in seiner Gesamtheit oben gezeigt. Ich habe, und meine .bashrc nicht set überall verwenden. (Ich vermutete zunächst, dass set -e könnte die Ursache sein). Keine Fallen, entweder, und der Fehlercode von $? 100 ist.

War es hilfreich?

Lösung

Es ist nicht wirklich eine Lösung, sondern ein Verbesserungsvorschlag.

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
}

Dies würde erhalten Sie eine sauberere und sicherere Art und Weise zu tun, was Sie wollen. Zuerst es überprüft, ob das Paket in den Repositories mit einem trockenen ersten Lauf durchführen. Danach wird es überprüft, ob der Fehlercode 100 (wegen fehlgeschlagen nicht gefunden zu verpacken) und eine Cache-Suche aufrufen, wenn so es sonst nur das Paket installiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top