Como os scripts do bash expandem globs de arquivos?

0

Nesse código, espera-se que a variável excludespec corresponda a toda a substring, mas parece avaliar os arquivos reais correspondentes a ela quando executada, em vez de passar sua representação exata ao comando tar usando-a.

excludespec=${PWD##*/}\_$USER\_ hostname .bkcd_backup*

O resultado final é que o arquivo que está sendo criado não corresponde à lista de exclusão, portanto, as saídas de tar:

tar: .: file changed as we read it

A string está definindo algo que eu não sei?

Aqui está o código:

#!/bin/sh
# bkcd - backup current directory in situ

DMY_M() {
  date +%Y%m%d_%H%M
}

timestring=$(DMY_M)
echo 'pwd' - $timestring > .bkcdspec  
filename=${PWD##*/}\_$USER\_'hostname'.bkcd_backup.$timestring.tar.gz    
excludespec=${PWD##*/}\_$USER\_'hostname'.bkcd_backup*
fullexclude="$excludespec"tar.gz    
echo excludespec - $excludespec
echo filename - $filename
echo fullexclude - $fullexclude    
tar -cpzf $filename --exclude=$fullexclude .
rm .bkcdspec
    
por vfclists 21.01.2013 / 02:10

1 resposta

2

O curingas é feito após a substituição de variáveis. Para colar o valor literal de uma substituição, mas impedir o curinga, use aspas duplas em torno da referência $var .

    
por 21.01.2013 / 02:13