Question

Je suis en train d'écrire une fonction simple pour mon .bashrc, de simplifier un problème commun je:

$ 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

J'ai donc écrit ceci:

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

Mais peu importe ce que je fais, après la partie apt-get install fonctionne et des erreurs parce qu'il ne peut pas trouver le paquet que j'ai demandé, complètement la sortie de fonction. J'ai même essayé de faire ceci:

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

Encore une fois, rien après l'échec apt-get fonctionne. Curieusement, quand je lance:

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

(à l'invite bash) tout fonctionne comme prévu. Qu'est-ce que je fais mal?


Edit: La fonction est à la fin de mon .bashrc, et est représenté dans son intégralité ci-dessus. J'ai vérifié, et mon .bashrc n'utilise pas partout de set. (Je d'abord pensé que set -e pourrait être le coupable). Pas de pièges, soit, et le code d'erreur de $? est 100.

Était-ce utile?

La solution

Il est pas vraiment une solution, mais une suggestion d'amélioration.

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
}

Cela vous obtenir un moyen de faire plus propre et plus sûr ce que vous voulez. Au début, il vérifie si ce paquet est dans les dépôts en effectuant un premier sec exécuter. Après cela, il vérifie si le code d'erreur est 100 (a échoué en raison de l'emballage non trouvé) et l'invocation d'une recherche de cache si oui sinon il suffit d'installer le paquet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top