error de apt-get mata a mi función de fiesta
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.
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.