Estou tentando fazer um caso de teste para um bug relacionado ao NFS, onde rm -rf
falha com "Diretório não vazio" quando está vazio sempre que o inspeciono. No entanto, um script de teste simples não consegue reproduzir o erro, então tentei escrever um script que cria uma árvore de diretórios, preenche-a com arquivos e, em seguida, remove a árvore. Como suspeito que o problema esteja relacionado a algum cache de nome de arquivo, estou usando mktemp
para criar nomes aleatórios como este:
#!/bin/sh
set -x
readonly LEVELS=6
readonly BASE_DIR=test-dir
DIR="$BASE_DIR"
for (( level=0; level < LEVELS; ++level ))
do
if (( level > 0 )); then
DIR="$(mktemp -p "$DIR")" || exit
else
mkdir "$DIR" || exit
fi
for (( i=0; i < 4; ++i ))
do
date > $(mktemp -p "$DIR") || exit
done
sleep 0.5
done
rm -rf "$BASE_DIR"
No entanto, o script falha de uma forma que não entendo, assim:
> ./test-script.sh
+ readonly LEVELS=6
+ LEVELS=6
+ readonly BASE_DIR=test-dir
+ BASE_DIR=test-dir
+ DIR=test-dir
+ (( level=0 ))
+ (( level < LEVELS ))
+ (( level > 0 ))
+ mkdir test-dir
+ (( i=0 ))
+ (( i < 4 ))
+ date
++ mktemp -p test-dir
+ (( ++i ))
+ (( i < 4 ))
+ date
++ mktemp -p test-dir
+ (( ++i ))
+ (( i < 4 ))
+ date
++ mktemp -p test-dir
+ (( ++i ))
+ (( i < 4 ))
+ date
++ mktemp -p test-dir
+ (( ++i ))
+ (( i < 4 ))
+ sleep 0.5
+ (( ++level ))
+ (( level < LEVELS ))
+ (( level > 0 ))
++ mktemp -p test-dir
+ DIR=test-dir/tmp.iIbUu2ZDDN
+ (( i=0 ))
+ (( i < 4 ))
+ date
++ mktemp -p test-dir/tmp.iIbUu2ZDDN
mktemp: failed to create file via template ‘test-dir/tmp.iIbUu2ZDDN/tmp.XXXXXXXXXX’: Not a directory
./test-script.sh: line 15: $(mktemp -p "$DIR"): ambiguous redirect
+ exit
Então mktemp -p test-dir
não tem problemas, mas mktemp -p test-dir/tmp.iIbUu2ZDDN
tem. Poderia ser um bug em mktemp
, ou parece o bug que estou realmente procurando?
Estou ciente de que meu uso de mktemp
é um tanto atípico, mas enfim. O Binary vem de coreutils-8.32-150400.9.6.1.x86_64
(SLES15 SP6).
Listando o diretório após a falha que vejo:
r> ll test-dir/
total 16
-rw------- 1 windl dvmed 32 Mar 13 12:03 tmp.gbslFgK2eD
-rw------- 1 windl dvmed 0 Mar 13 12:03 tmp.iIbUu2ZDDN
-rw------- 1 windl dvmed 32 Mar 13 12:03 tmp.lR5NM8zLtb
-rw------- 1 windl dvmed 32 Mar 13 12:03 tmp.p5Xcfqa3Xr
-rw------- 1 windl dvmed 32 Mar 13 12:03 tmp.YRELcRCk6G
Meu palpite é que o "redirecionamento ambíguo" ocorre devido à mktemp
falha na criação de um nome de arquivo válido.