Se for um erro que você acha que desaparecerá depois de algum tempo, tente um loop simples:
while ! rm some files; do
echo 'rm failed, sleeping for 5 seconds'
sleep 5
echo 'retrying...'
done
Eu tenho um pequeno script que tem que remover alguns arquivos.
Como posso gerenciar o erro device or resource busy
de rm
?
Posso pegar? Como uma tentativa / captura?
Então, se eu pegá-lo, por exemplo, durmo 3 segundos e depois repito ..
Obrigado
Se for um erro que você acha que desaparecerá depois de algum tempo, tente um loop simples:
while ! rm some files; do
echo 'rm failed, sleeping for 5 seconds'
sleep 5
echo 'retrying...'
done
Se você quiser detectar esse erro específico, tente sondar o código de erro 16
na última execução de rm
. Exemplo:
rm /path/to/foo
if [ $? -eq 16 ]; then
echo "Device busy"
fi
$?
é a variável de shell especial que significa "estado de saída do último comando". Se esse estado for zero 0
, significa que o último comando foi bem-sucedido e, se diferente de zero, significa falha e é mapeado para uma mensagem de erro. Todas as mensagens de erro estão disponíveis no arquivo de origem do Linux linux/include/uapi/asm-generic/errno-base.h
e 16
é:
#define EBUSY 16 /* Device or resource busy */
Se você quiser lidar com o processo que está causando o erro de arquivo aberto, lsof +D /path/too/foo/
mostrará quais arquivos estão abertos dentro desse diretório. lsof(8)
manpage.
Material relacionado:
Tags rm shell-script