BASH: comportamento inesperado da declaração booleana ao verificar se existe um diretório

0

Eu tenho que pegar alguns arquivos de um dispositivo e armazená-los em um diretório com um nome específico. Estou escrevendo um script que faz isso, mas uma das primeiras coisas que ele faz é verificar se o diretório com o nome desejado já existe.

A versão do dispositivo é o que determina o nome do diretório, mas a formatação está desativada. Do meu dispositivo, recebo o seguinte número: NUM=10-2-2 Eu tenho que reformatar para 10.2.2, então eu uso NUM=$(echo $NUM | tr "-" ".") Este é o nome de um diretório. O caminho completo, então, seria /var/www/myServer/10.2.2 .

No entanto, o código a seguir:

Filepath=/var/www/myServer/$NUM
if [ -d $Filepath ]; then
   echo the directory exists
else
    echo the directory does not exist
fi

sempre me diz que o diretório não existe. Mas se eu declarar a variável Filepath diretamente (ou seja, Filepath=/var/www/myServer/10.2.2 ), obtenho o resultado desejado. Por que isso acontece?

A saída do comando tr é a seguinte:

~$ <command-that-gets-version-number> | tr "-" "."
10.2.2

Por que isso acontece? Qualquer ideia seria útil.

Estou executando isso no Ubuntu 11.x

    
por farid99 10.07.2015 / 00:08

1 resposta

1

Encontrei meu problema. O resultado da linha <command-that-gets-version-number> | tr "-" "." estava deixando um caractere carriage return no final. Eu notei isso porque quando eu executei: ~$ printf %s "$NUM" | od -t x1 a saída mostrou que o último caractere era 0d , que é retorno de carro.

    
por farid99 10.07.2015 / 01:13