Pregunta

Estoy intentando escribir una función simple para mi .bashrc, para simplificar un problema común que tengo:

$ 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

Así que escribió esto:

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

Pero no importa lo que haga, una vez ejecutado el parte apt-get install y errores hacia fuera porque no puede encontrar el paquete que pedí, se cierra la función por completo. Incluso he intentado hacer esto:

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

Una vez más, no hay nada después de la apt-get no se ejecuta. Curiosamente, cuando corro:

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

(en el indicador bash) todo funciona como se esperaba. ¿Qué estoy haciendo mal?


Edit: La función se encuentra al final de mi archivo .bashrc, y se muestra en su totalidad anteriormente. Que yo sepa, y mi .bashrc no utiliza ningún set. (Inicialmente sospechaba que set -e podría ser el culpable). No hay trampas, tampoco, y el código de error de $? es 100.

¿Fue útil?

Solución

En realidad no es una solución sino una sugerencia de mejora.

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
}

Esto le conseguiría un limpiador y la forma más segura de hacer lo que quiera. Al principio comprueba si el paquete está en los repositorios mediante la realización de un ejecutar primero seco. Después de que se comprueba si el código de error 100 (falló debido a empaquetar no encontrado) y la invocación de una caché de búsqueda si es así de lo contrario simplemente instala el paquete.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top