
Eu tenho um script em execução em uma pasta. Se um comando falhar, quero excluir a pasta que contém o script. Isso é possível?
Editar: com base no comentário, tirei o que tentei.
Responder1
Eu respondo porque estou preocupado que alguém tente a sugestão do OP ...
um GRANDE aviso: o script mostrado na pergunta exclui o diretório fornecido por pwd
, que NÃO é o diretório em que o script está, maso diretório em que o USUÁRIO está ao iniciar o script.
Se alguém fizer isso: (** NÃO TENTE ISSO **) cd ; /path/to/thatscript
eles excluiriam TODO O DIRETÓRIO HOME DO USUÁRIO (como "cd" voltou para ele) E TUDO POR BAIXO! ...
(Isso é especialmente ruim em alguns sistemas operacionais onde o homedir do root é "/" ... ).
Em vez disso, no seu script você deve:
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.
Responder2
Sim você pode.
e é isso que vai acontecer:
[root@servidor ~]# mkdir novo&&cd novo [root@servidor novo]# echo -e "#! /bin/bash\nrm -rf" >remove.sh [root@servidor novo]# cat remove.sh #!/bin/bash rm -rf ~/novo [root@servidor novo]#ls remover.sh [root@servidor novo]# bash remove.sh [raiz@servidornovo]#ls (vazio aqui, todos os arquivos e diretórios são excluídos, mas ainda estamos dentro desta "nova" pasta antes de alterarmos nosso diretório) [raiz@servidornovo]# cd .. [root@servidor ~]#ls novo ls: não é possível acessar novo: esse arquivo ou diretório não existe