apt-get Fehler tötet meine bash-Funktion
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.
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.