Autor Tema: Error en script SH (ubuntu/Linux).  (Leído 122 veces)

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

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.866
  • Valoración: 67
Error en script SH (ubuntu/Linux).
« Mensaje inicial: 04 de Junio de 2018, 13:55 »
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: 04 de Junio de 2018, 20:12 por wolf »



jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 288
  • Valoración: 23
  • 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.866
  • Valoración: 67
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

Creo que los "sudo" en amarillo sobran, pues el script ya se ejecuta como superuser ("sudo ./ubucleaner.sh") y no deben de volver a pedir permisos ninguna de sus instrucciones (lo he probado y va bien sin ellos). 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: 05 de Junio de 2018, 04:01 por wolf »

wolf

  • Miembro milenario
  • ******
  • Desconectado Desconectado
  • Registrado: 06/07/2007
  • Mensajes: 1.866
  • Valoración: 67
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. Se crea un archivo de texto -> copy/paste y se le añade extensión .sh, con el nombre que queramos. Se guarda en la carpeta personal y se ejecuta así (desde un terminal):

sudo ./nombre.sh -> Enter (Se van aceptando, o no, las opciones de borrado de "cosas" que va dando, pero el borrado de papeleras es directo, sin preguntar)

jj35

  • Miembro habitual
  • ****
  • Desconectado Desconectado
  • Registrado: 23/05/2013
  • Mensajes: 288
  • Valoración: 23
  • 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.866
  • Valoración: 67
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 »