Como usar uma variável mais glob ($ var *) no bash

2

Estou tendo um problema com um script.

Então esse é o código

#!/bin/bash

date='date +"%m-%d-%y"'

dokuwiki="dokuwiki.$date*.toolbox.admin.tar.gz"

if test -e  $dokuwiki
then
echo "works"
else
echo "shits broken yo"
fi

Meu problema, acho que não encontra o arquivo que é estranho

os arquivos são assim:

dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz

felicidades

    
por tamani 12.09.2014 / 10:10

3 respostas

1

As aspas impedem que o * execute o glob para corresponder ao arquivo. Se houver apenas um arquivo que será corrigido, simplesmente remova as aspas; caso contrário, você terá que modificar o script para manipular vários nomes de arquivos na expansão, por exemplo,

for filename in $dokuwiki; do
    # do something with $filename
done
    
por 12.09.2014 / 10:38
1

o problema é que a expansão star ( * ) é feita pelo bash.

com um arquivo doku *

mybox $ touch dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz
mybox $ date='date +"%m-%d-%y"'
mybox $ echo $date
09-12-14
mybox $ dokuwiki="dokuwiki.$date*.toolbox.admin.tar.gz"
mybox $ echo $dokuwiki
dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz
mybox $ test -e $dokuwiki ; echo $?
0

com dois arquivos docu *

mybox $ touch dokuwiki.09-12-14-05-00.toolbox.admin.tar.gz
mybox $ test -e $dokuwiki ; echo $?
-bash: test: dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz: binary operator expected
2

a linha test -e doku* é expandida em test -e doku-1 doku2 .

você pode querer usar

if ls $dokuwiki > /dev/null  2>&1 
then
   ...

como parte do teste.

    
por 12.09.2014 / 12:23
-1

Se você usa o existe em se assim

if [ -e $docuwiki ]
then
    echo "works"
else
    echo "broken"
fi

funcionaria. Conforme mencionado abaixo, a instrução if é equivalente. Tendo recopiado da pergunta, acho que é realmente um problema com a variável docuwiki, já que não consigo ecoar corretamente, reescrevê-la manualmente ajudou.

    
por 12.09.2014 / 10:48

Tags