Por que minha concatenação de variáveis shell não está funcionando no bash do ubuntu?

0

Não consigo explicar o comportamento abaixo. Alguma idéia?

    Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-32-generic x86_64)

     * Documentation:  https://help.ubuntu.com/
    New release '14.04.2 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.

    Last login: Wed Oct 21 22:43:19 2015 from 10.0.2.2
    vagrant@master:~$ echo $0
    -bash
    vagrant@master:~$ export A=/hello
    vagrant@master:~$ echo $A
    /hello
    vagrant@master:~$ echo $A/bin
    /hello/bin
    vagrant@master:~$ echo $A/bin/asd
    /hello/bin/asd
    vagrant@master:~$ export A=/hello-2.6.1
    vagrant@master:~$ echo $A
    /hello-2.6.1
    vagrant@master:~$ echo $A/bin
    /hello-2.6.1/bin
    vagrant@master:~$ echo $A/bin/asd
    /hello-2.6.1/bin/asd
    vagrant@master:~$ echo $HADOOP_HOME
    /opt/hadoop-2.6.1
    vagrant@master:~$ echo $HADOOP_HOME/bin
    /bin/hadoop-2.6.1
    vagrant@master:~$ echo $HADOOP_HOME/bin1234
    /bin1234oop-2.6.1
    vagrant@master:~$ uname -a
    Linux master 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:51:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
    vagrant@master:~$ export A=/opt/hadoop-2.6.1
    vagrant@master:~$ echo $A/bin
    /opt/hadoop-2.6.1/bin
    vagrant@master:~$ echo $A/bin/asd
    /opt/hadoop-2.6.1/bin/asd
    vagrant@master:~$ echo $A
    /opt/hadoop-2.6.1
    vagrant@master:~$
    
por Hemen Kapadia 22.10.2015 / 07:59

2 respostas

2

Parece que sua variável HADOOP_HOME foi definida para um valor que termina com um retorno de carro, ou seja,

/ o p t / h a d o o p - 2 . 6 . 1 carriage return

então quando você faz

echo $HADOOP_HOME/bin

você está recebendo a saída

/ o p t / h a d o o p - 2 . 6 . 1 carriage return
/ b i n

apenas todos em uma linha, então o /bin substitui o /opt na tela e parece que

/bin/hadoop-2.6.1

Você pode verificar isso fazendo

A=/opt/hadoop-2.6.1
echo $A | od -cb
echo $HADOOP_HOME | od -cb

Tente encontrar onde HADOOP_HOME está sendo definido. Pode ser um dos seus arquivos " . "; Por exemplo, .profile , .bashrc ou .bash_profile no seu diretório inicial, ou um arquivo com nome semelhante em /etc . Se você usar vi , ele deverá mostrar ^M no final da string; que representa o retorno de carro. Exclua o ^M .

    
por 22.10.2015 / 08:19
2

Parece que a variável $HADOOP_HOME tem um caractere CR no final. Verifique isso com echo $HADOOP_HOME | cat -vet . Deve parecer com /opt/hadoop-2.6.1$ . Em caso afirmativo, altere o arquivo onde esta variável está definida.

    
por 22.10.2015 / 08:24

Tags