Autor Tema: [ Resuelto ] Error en script SH (ubuntu/Linux).  (Leído 398 veces)

0 Usuarios y 1 Visitante están viendo este tema.

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.878
  • Valoración: 69
Hola.

Estoy con Linux (ubuntu 16.04 LTS) y tengo el siguiente archivo .sh (script ejecutable por consola) que da error:

Citar
#!/bin/bash
 
 
 
OLDCONF=$(dpkg -l|grep "^rc"|awk '{print $2}')
 
CURKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')
 
LINUXPKG="linux-(image|headers|ubuntu-modules|restricted-modules)"
 
METALINUXPKG="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"
 
OLDKERNELS=$(dpkg -l|awk '{print $2}'|grep -E $LINUXPKG |grep -vE $METALINUXPKG|grep -v $CURKERNEL)
 
YELLOW="\033[1;33m"
 
RED="\033[0;31m"
 
ENDCOLOR="\033[0m"
 
if [ $USER != root ]; then
 
echo -e $RED"Error: must be root"
 
echo -e $YELLOW"Exiting..."$ENDCOLOR
 
exit 0
 
fi
 
echo -e $YELLOW"Cleaning apt cache..."$ENDCOLOR
 
apt clean
 
echo -e $YELLOW"Removing old config files..."$ENDCOLOR
 
sudo apt purge $OLDCONF
 
echo -e $YELLOW"Removing old kernels..."$ENDCOLOR
 
sudo apt purge $OLDKERNELS
 
echo -e $YELLOW"Emptying every trashes..."$ENDCOLOR
 
rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
 
rm -rf /root/.local/share/Trash/*/** &> /dev/null

 
echo -e $YELLOW"Script Finished!"$ENDCOLOR

El error está en la parte resaltada en naranja y el mensaje del error es el siguiente:

Citar
./ubucleaner.sh: línea 45: error sintáctico cerca del elemento inesperado `;&'
./ubucleaner.sh: línea 45: `rm -rf /home/.local/share/Trash/*/** &> /dev/null'


¿Alguien tiene idea?
« Última modificación: 26 de Junio de 2018, 00:31 por wolf »



jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 315
  • Valoración: 25
  • Sexo: Masculino
Re:Error en script SH (ubuntu/Linux).
« Respuesta #1: 04 de Junio de 2018, 16:29 »
De script en linux no tengo idea (no se: amp que significa ni gt:). probaste a modificar el script conservando el original:

rm -rf /home/*/.local/share/Trash/*/** >> /dev/null
 
rm -rf /root/*/.local/share/Trash/*/** >> /dev/null
Sabe más el diablo por viejo que por diablo.

A pesar de estar envejeciendo, sigo aprendiendo, el diablo debe ser muyyy viejo.

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.878
  • Valoración: 69
Re:Error en script SH (ubuntu/Linux).
« Respuesta #2: 04 de Junio de 2018, 18:41 »
Casi das en el clavo,jj. Has puesto ">>", y sería "&>". Yo tampoco tengo ni idea de scripts, ni de win ni de Linux; todo lo he ido viendo por inet y haciendo pruebas.

Bajé este script hace mucho de una web y lo tuve que modificar hasta que funcionó, pero ahora no me da la cabeza (me da menos aún...) ya, y ni recuerdo cómo lo hice. Conservaba el original (he hecho copia para modificaciones). El tema es, que parece que en la página se mostraba esa parte con el típico error de codificación, parece... He estado buscándolo de nuevo y he encontrado el script original. De todos modos, no sé si habría que modificar aún algo de esa parte de las papeleras...

Citar
#!/bin/bash
 
OLDCONF=$(dpkg -l|grep "^rc"|awk '{print $2}')
CURKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')
LINUXPKG="linux-(image|headers|ubuntu-modules|restricted-modules)"
METALINUXPKG="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"
OLDKERNELS=$(dpkg -l|awk '{print $2}'|grep -E $LINUXPKG |grep -vE $METALINUXPKG|grep -v $CURKERNEL)
YELLOW="\033[1;33m"
RED="\033[0;31m"
ENDCOLOR="\033[0m"
 
if [ $USER != root ]; then
echo -e $RED"Error: must be root"
echo -e $YELLOW"Exiting..."$ENDCOLOR
exit 0
fi
 
echo -e $YELLOW"Cleaning apt cache..."$ENDCOLOR
apt clean
 
echo -e $YELLOW"Removing old config files..."$ENDCOLOR
sudo apt purge $OLDCONF
 
echo -e $YELLOW"Removing old kernels..."$ENDCOLOR
sudo apt purge $OLDKERNELS
 
echo -e $YELLOW"Emptying every trashes..."$ENDCOLOR
rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
rm -rf /root/.local/share/Trash/*/** &> /dev/null
 
echo -e $YELLOW"Script Finished!"$ENDCOLOR

Lo de las papeleras tengo que probarlo bien. Comentaré, pero he probado de borrar un archivo localizado en otra unidad/ruta y, poniendo dicha ruta y con "&>", lo ha borrado y ningún error.

EDITO: He probado la papelera "home" y va bien, falta probar la "root". La línea para "home trash" debería quedar así:

rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
« Última modificación: 25 de Junio de 2018, 18:44 por wolf »

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.878
  • Valoración: 69
Re:Error en script SH (ubuntu/Linux).
« Respuesta #3: 05 de Junio de 2018, 04:11 »
Es un script bastante útil para borrar, en ocasiones, bastantes megas de morralla, sobre todo de antiguas versiones de kernels que se van acumulando. Quien quiera, lo puede probar.

Desde linux y situados en el directorio personal:

1. Crear un documento de texto vacío. Abrir el documento de texto vacío.
2. Copiar el script citado en mi segundo post y pegar en el documento de texto vacío.
3. Guardar.
4. Renombrar el documento con el nombre que queramos, añadiendo la extensión ".sh" (sin entrecomillado).
5. Ejecutar así (desde un terminal): sudo ./nombre.sh -> Enter

Y se van aceptando, o no, las opciones de borrado de "cosas" que va dando, pero el borrado de papeleras es directo (sin preguntar).
« Última modificación: 25 de Junio de 2018, 19:21 por wolf »

jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 315
  • Valoración: 25
  • Sexo: Masculino
Re:Error en script SH (ubuntu/Linux).
« Respuesta #4: 05 de Junio de 2018, 14:47 »
Hola Wolf, guardé el script para hacer limpieza de cuando en cuando. Gracias wolf.

En win para redirigir toda la salida del comando se usa 2>&1 > null, redirige mensajes "1" y mensajes de error "2"  a "nada", en Linux ignoro el comportamiento de tantas cosas.

Como se trata de enviar a "nada" los mensajes, con redirigir-lo a /dev/null debe ser suficiente.

Gracias Wolf.  :saludo:
Sabe más el diablo por viejo que por diablo.

A pesar de estar envejeciendo, sigo aprendiendo, el diablo debe ser muyyy viejo.

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.878
  • Valoración: 69
Re:Error en script SH (ubuntu/Linux).
« Respuesta #5: 05 de Junio de 2018, 15:07 »
Si tienes KDE, no funcionarán bien los colorines en el terminal y hay que modificar esa parte:

Citar
YELLOW=”\033[1;33m”
RED=”\033[0;31m”
ENDCOLOR=”\033[0m”

Por:

YELLOW=”\e[1;33m”
RED=”\e[0;31m”
ENDCOLOR=”\e[0m”

Gracias por la info sobre programación. Se ve que tienes idea (pilotas bastante), para mi es como ver líneas en védico.

« Última modificación: 05 de Junio de 2018, 18:44 por wolf »

jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 315
  • Valoración: 25
  • Sexo: Masculino
Re:Error en script SH (ubuntu/Linux).
« Respuesta #6: 23 de Junio de 2018, 21:42 »
Hola Wolf.

No me funciona el script para los kernel, sale directamente diciendo que no encuentra no recuerdo que. Los eliminare con  synaptic que es con lo que mas me aclaro.
Como ignoro todo sobre scripts .sh no se modificarlo, tendría que aprender algo sobre ello..

En software de Ubuntu hay un programa para limpieza, llamado BleachBit, borra logs, temporales etc... en esta instalación borró casi 2GB de archivos, casi todos de pocos KB.

Saludos. :-)
Sabe más el diablo por viejo que por diablo.

A pesar de estar envejeciendo, sigo aprendiendo, el diablo debe ser muyyy viejo.

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.878
  • Valoración: 69
Re:Error en script SH (ubuntu/Linux).
« Respuesta #7: 24 de Junio de 2018, 15:36 »
Quizá hayan cambiado algo en esa distro (como estos también están siempre jodiendo con cambios e historias). No puedo probarlo en 18.04. Lo último que me ha pasado es: hacer instalación limpia, configurar las actualizaciones, actualizar, reiniciar y quedarse clavado e INÚTIL (por segunda vez consecutiva). Y sólo marqué las actualizaciones de seguridad e imprescindibles (nada de chorradas). Ubuntu HA MUERTO para mi (no podré probar el script). En la 16.04 va bien, sólo que, si no encuentra kernels antiguos que borrar, va directo hasta finalizar todo y se cierra.

Ayudaría el mensaje exacto que te da.
« Última modificación: 25 de Junio de 2018, 19:10 por wolf »

jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 315
  • Valoración: 25
  • Sexo: Masculino
Re:Error en script SH (ubuntu/Linux).
« Respuesta #8: 24 de Junio de 2018, 19:39 »
Esto devuelve (y sale del script) ahora que ya no hay kernel por desinstalar, lo desinstale con synaptic, el error que devolvia creo recordar que no encontraba 'rc' o algo similar y salia del script, lo ejecuto con sudo. Pero bueno ya hice una buena limpieza.

Spoiler
awk: línea ord.:1: ‘{print
awk: línea ord.:1: ^ caracter '?' inválido en la expresión
sed: -e expresión #1, carácter 1: orden desconocida: «?»
sed: -e expresión #1, carácter 1: orden desconocida: «?»
./script-limpia.sh: línea 5: error sintáctico cerca del elemento inesperado `('
./script-limpia.sh: línea 5: `LINUXPKG=”linux-(image|headers|ubuntu-modules|restricted-modules)”'

Gracias Wolf.
Sabe más el diablo por viejo que por diablo.

A pesar de estar envejeciendo, sigo aprendiendo, el diablo debe ser muyyy viejo.

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.878
  • Valoración: 69
Re:Error en script SH (ubuntu/Linux).
« Respuesta #9: 24 de Junio de 2018, 21:42 »
Desde linux, ¿podrías copiar tu script y pegarlo aquí?...

Buena recomendación la de "BleachBit" (se me olvidó comentarlo).

jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 315
  • Valoración: 25
  • Sexo: Masculino
Re:Error en script SH (ubuntu/Linux).
« Respuesta #10: 24 de Junio de 2018, 23:38 »
Aqui está el script tal como lo copié y guardé.

Spoiler
#!/bin/bash

OLDCONF=$(dpkg -l|grep “^rc”|awk ‘{print $2}’)
CURKERNEL=$(uname -r|sed ‘s/-*[a-z]//g’|sed ‘s/-386//g’)
LINUXPKG=”linux-(image|headers|ubuntu-modules|restricted-modules)”
METALINUXPKG=”linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)”
OLDKERNELS=$(dpkg -l|awk ‘{print $2}’|grep -E $LINUXPKG |grep -vE $METALINUXPKG|grep -v $CURKERNEL)
YELLOW=”\033[1;33m”
RED=”\033[0;31m”
ENDCOLOR=”\033[0m”

if [ $USER != root ]; then
echo -e $RED”Error: must be root”
echo -e $YELLOW”Exiting…”$ENDCOLOR
exit 0
fi

echo -e $YELLOW”Cleaning apt cache…”$ENDCOLOR
apt clean

echo -e $YELLOW”Removing old config files…”$ENDCOLOR
sudo apt purge $OLDCONF

echo -e $YELLOW”Removing old kernels…”$ENDCOLOR
sudo apt purge $OLDKERNELS

echo -e $YELLOW”Emptying every trashes…”$ENDCOLOR
rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
rm -rf /root/.local/share/Trash/*/** &> /dev/null

echo -e $YELLOW”Script Finished!”$ENDCOLOR
Sabe más el diablo por viejo que por diablo.

A pesar de estar envejeciendo, sigo aprendiendo, el diablo debe ser muyyy viejo.

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.878
  • Valoración: 69
Re:Error en script SH (ubuntu/Linux).
« Respuesta #11: 25 de Junio de 2018, 00:04 »
Desde linux, crea un documento y copia/pega el script que cité en mi segundo post.
« Última modificación: 25 de Junio de 2018, 19:14 por wolf »

jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 315
  • Valoración: 25
  • Sexo: Masculino
Re:Error en script SH (ubuntu/Linux).
« Respuesta #12: 25 de Junio de 2018, 11:22 »
Hola Wolf.
Muchas gracias, soy un ignorante en linux, debere de leer algo.

Por fin funciono el script, ni idea de porque, sabes porque ahora funciona y antes no. No pregunto nada mas que si queria continuar.

Spoiler
patri@PCPCA:~/Documentos$ sudo ./script-limpia-1.sh
Cleaning apt cache...
Removing old config files...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Removing old kernels...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Los siguientes paquetes se ELIMINARÁN:
  linux-image-4.15.0-22-generic* linux-modules-extra-4.15.0-22-generic*
0 actualizados, 0 nuevos se instalarán, 2 para eliminar y 0 no actualizados.
Se liberarán 179 MB después de esta operación.
¿Desea continuar? [S/n] s
(Leyendo la base de datos ... 226321 ficheros o directorios instalados actualmente.)
Desinstalando linux-modules-extra-4.15.0-22-generic (4.15.0-22.24) ...
Desinstalando linux-image-4.15.0-22-generic (4.15.0-22.24) ...
/etc/kernel/prerm.d/dkms:
dkms: removing: bcmwl 6.30.223.271+bdcom (4.15.0-22-generic) (x86_64)

-------- Uninstall Beginning --------
Module:  bcmwl
Version: 6.30.223.271+bdcom
Kernel:  4.15.0-22-generic (x86_64)
-------------------------------------

Status: Before uninstall, this module version was ACTIVE on this kernel.

wl.ko:
 - Uninstallation
   - Deleting from: /lib/modules/4.15.0-22-generic/updates/dkms/
 - Original module
   - No original module was found for this module on this kernel.
   - Use the dkms install command to reinstall any previous module version.

depmod...

DKMS: uninstall completed.
I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-23-generic
I: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-23-generic
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-4.15.0-22-generic
/etc/kernel/postrm.d/zz-update-grub:
Generando un fichero de configuración de grub...
Encontrada imagen de linux: /boot/vmlinuz-4.15.0-23-generic
Encontrada imagen de memoria inicial: /boot/initrd.img-4.15.0-23-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Encontrado Windows Recovery Environment en /dev/sda1
Encontrado Windows 7 en /dev/sda2
hecho
(Leyendo la base de datos ... 221349 ficheros o directorios instalados actualmente.)
Purgando ficheros de configuración de linux-image-4.15.0-22-generic (4.15.0-22.24) ...
rmdir: fallo al borrar '/lib/modules/4.15.0-22-generic': El directorio no está vacío
Purgando ficheros de configuración de linux-modules-extra-4.15.0-22-generic (4.15.0-22.24) ...
Emptying every trashes...
Script Finished!
patri@PCPCA:~/Documentos$

EDITO.

Al abrir ambos scripts y cambiar de uno al otro, veo que el primero está en codificación "utf sin boom" y el que funciona está en "ansi", debe ser eso pues son iguales.
« Última modificación: 25 de Junio de 2018, 12:06 por jj35 »
Sabe más el diablo por viejo que por diablo.

A pesar de estar envejeciendo, sigo aprendiendo, el diablo debe ser muyyy viejo.

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.878
  • Valoración: 69
Re:Error en script SH (ubuntu/Linux).
« Respuesta #13: 25 de Junio de 2018, 13:33 »
Alguna "chorrada" así me temía. Mejor copiar, desde linux y creando un archivo de texto de linux, el script citado en mi último post.

En tu log veo esto: rmdir: fallo al borrar '/lib/modules/4.15.0-22-generic': El directorio no está vacío

Puede que al final sí que haya que incluir los "sudo" en el script. Cuando puedas, añádelos y prueba a ver si te devuelve esa línea:

Citar
echo -e $YELLOW"Removing old config files..."$ENDCOLOR
sudo apt purge $OLDCONF
 
echo -e $YELLOW"Removing old kernels..."$ENDCOLOR
sudo apt purge $OLDKERNELS

Con los sudo jamás me ha dado problemas, pero no he podido probarlo aún sin éstos, por todos los problemas que he tenido con la 18.04, y ya no he vuelto a la 16.04. Voy a probar openSUSE.

Puedes mirar en "/lib/modules/", a ver si sigue ahí "4.15.0-22-generic...". De seguir ahí, se podría borrar con: sudo rm -rfv /lib/modules/4.15.0-22-generic... Primero, haz una copia del archivo y la colocas en otra unidad, por si las moscas... Que puedas copiarlo de nuevo en ese directorio (a través de win o del liveCD) en caso de problemas de arranque de kkubuntu o algo.

Aunque el script debe de funcionar bien de una forma u otra (y, además, se encarga de purgar todo lo innecesario).

Por cierto, ignorantes "semos" todas, y yo más que tú. Ignorante y "replicón" que, por lo segundo, me llevé una "reprimenda" de parte de tebasuna y, por lo primero, una "Cerrada de boca" por parte de overdrive... Y todo en un par de días (hace bien poco). Toy algo plop...
« Última modificación: 25 de Junio de 2018, 15:46 por wolf »

jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 315
  • Valoración: 25
  • Sexo: Masculino
Re:Error en script SH (ubuntu/Linux).
« Respuesta #14: 25 de Junio de 2018, 15:50 »
Muchas gracias wolf, muy útil el script, jejejeje.

Yo también tengo días que mejor estaría callado, no te montes un drama pues somos como somos y a veces no pensamos y ala al tajo.

Saludos  :si:
Sabe más el diablo por viejo que por diablo.

A pesar de estar envejeciendo, sigo aprendiendo, el diablo debe ser muyyy viejo.