
Tengo un script ejecutándose en una carpeta. Si un comando falla, quiero eliminar la carpeta que contiene el script. ¿Es eso posible?
Editar: según el comentario, saqué lo que probé.
Respuesta1
Doy una respuesta porque me preocupa que alguien intente la sugerencia del OP...
una GRAN advertencia: el script que se muestra en la pregunta elimina el directorio proporcionado por pwd
, que NO es el directorio en el que se encuentra el script, peroel directorio en el que se encuentra el USUARIO al iniciar el script.
Si uno hace: (**NO INTENTE ESTO **) cd ; /path/to/thatscript
eliminarían TODO EL DIRECTORIO DE INICIO DEL USUARIO (ya que "cd" volvió a aparecer en él) ¡Y TODO DEBAJO! ...
(Esto es especialmente malo en algunos sistemas operativos donde el directorio principal del root es "/"...).
En su lugar, en su script debería:
mydir="$(cd -P "$(dirname "$0");pwd)"
#retrieve the script's absolute path,
#even if the script was called via ../relative/path/to/script
echo "the script '$0' is in: ${mydir} "
...
# and then (if you really want this.... but I think it's a bad idea!)
# rm -rf "${mydir:-/tmp/__UNDEFINED__}" #deletes ${mydir}, if defined
# once you're sure it is correctly reflecting the real script's directory.
Respuesta2
Sí tu puedes.
y esto es lo que pasará:
[root@servidor ~]# mkdir nuevo&&cd nuevo [root@servidor nuevo]# echo -e "#! /bin/bash\nrm -rf" >remove.sh [root@servidor nuevo]# cat remove.sh #!/bin/bash rm -rf ~/nuevo [root@servidor nuevo]# ls eliminar.sh [root@servidor nuevo]# bash remove.sh [raíz@servidornuevo]# es (Aquí está vacío, se eliminan todos los archivos y directorios, pero todavía estamos dentro de esta carpeta "nueva" antes de cambiar nuestro directorio) [raíz@servidornuevo]# cd .. [root@servidor ~]# es nuevo ls: no se puede acceder a nuevo: no existe tal archivo o directorio