Meu script usa um arquivo tmp onde grava e exclui dados. Eu uso redirecionamentos para escrever e sed
excluir.
Em algum momento, quero verificar se o arquivo existe e está vazio, mas meu código falha (o arquivo existe e não possui dados):
[[ -s /tmp/tmp_file ]] && echo "not empty" || echo "empty"
not empty
Quando verifico o tamanho do arquivo, ele mostra 1 byte, apesar de o arquivo não conter dados.
Se eu abrir o arquivo com o gedit e salvar o arquivo, ele mostrará o tamanho de 0 byte.
Por que isso está acontecendo?
Como ter certeza de que, excluindo o conteúdo, não resta nenhum byte extra?
Adicionadas saídas de ls -ld
e od
, quando o arquivo está "vazio" (um byte):
ls -ld tmp_file
-rwxr-xr-x 1 root root 1 dic 18 15:43 tmp_file
od tmp_file
0000000 000012
0000001
Imagem mostrando o tamanho de um byte:
Imagem do arquivo aberto no gedit:
Arquivo de 1 byte, contendo apenas um \n.
Use
>/tmp/foo
para zerar.Vou adivinhar que você está usando
echo
para gravar no arquivo, que está anexando um caractere de nova linha e quando você exclui comsed
, você não está correspondendo à nova linha ao excluir.Existem algumas opções aqui:
1: use
printf
ou (echo -n
se suportado) para escrever sem novas linhas à direita.2: combine as novas linhas à direita com sed para removê-las.
3: O método de Steve para esvaziar o arquivo quando apropriado.