O conteúdo da variável parece mudar

0

Eu tenho uma variável com um caminho de diretório. Se eu echo seu conteúdo, ele exibe o caminho certo, mas se eu tentar cd , ele não exibirá e parecerá excluir o /home/user/ do caminho:

[user@project]$ echo $PROJECT_DELIVERY
/home/user/projects/ws/project/delivery/project_name_0.1.0
[user@project]$ cd $PROJECT_DELIVERY
: No such file or directoryuser/projects/ws/project/delivery/project_name_0.1.0

Este é o conteúdo de printf %s "$PROJECT_DELIVERY" | xxd

[a27503408@ded30325 install]$ printf %s "$PROJECT_DELIVERY" | xxd
0000000: 2f68 6f6d 652f 6132 3735 3033 3430 382f  /home/user/
0000010: 7072 6f6a 6563 7473 2f61 7332 3530 2f41  projects/as250/A
0000020: 5332 3530 5f4d 3135 3533 5f54 4d54 432f  S250_M1553_TMTC/
0000030: 6465 6c69 7665 7279 2f41 5332 3530 5f4d  delivery/AS250_M
0000040: 3135 3533 5f54 4d54 435f 302e 312e 300d  1553_TMTC_0.1.0.

Alguma ideia do que poderia estar causando esse comportamento? Estou usando o bash 4.1.2 (1)

    
por WooWapDaBug 13.02.2018 / 11:41

3 respostas

3

Você tem um CR à direita no nome do diretório. (Veja o 0d como o caractere final no dump hexadecimal.)

Isso também explica por que o caminho do diretório é substituído pela mensagem de erro. Normalmente você pegaria

cd /qwerty
-bash: cd: /qwerty: No such file or directory

Mas você estava obtendo o equivalente a isso, onde as informações principais foram substituídas pelo CR e a mensagem de erro subsequente:

cd /qwerty
: No such file or directory

Tente demonstrar isso:

echo "$PROJECT_DELIVERY<"

Você pode remover o caractere \r final com um constructo como este

r=$'\r'                                      # Or r=$(printf "\r")
PROJECT_DELIVERY="${PROJECT_DELIVERY%$r}"    # Strip the CR from the end
    
por 13.02.2018 / 13:39
1

Como @Kusalananda comentou, sua variável contém mais do que o olho - desatento. Veja a linha em branco após a saída de eco?

    
por 13.02.2018 / 12:22
0

Na verdade, havia caracteres "\ r" e "\ n". Eu os removi com:

VARIABLE="$(echo "$VARIABLE"|tr -d '\n'|tr -d '\r')"
    
por 13.02.2018 / 13:52

Tags