concatenar cadeia no shell

1

Eu tenho um arquivo config.ini:

repo_path=ssh://git@localhost:10022/root/
dir_path=/home/vagrant/workspace/

e um 'script.sh' para exportar e concatenar desse arquivo da seguinte forma:

while read -r line; do export $line; done <config.ini
repo_name=$1
repo_path=$repo_path$repo_name'.git'
dir_path=$dir_path/$repo_name
echo $repo_path
echo $dir_path

quando eu executo o script:

./script.sh sample

saída:

sample.gitlocalhost:10022/root/
/sampleagrant/workspace/

resultado esperado:

ssh://git@localhost:10022/root/sample.git
/home/vagrant/workspace/sample
    
por Gimbo 09.10.2015 / 18:52

1 resposta

3

Uma explicação plausível é que você tem um retorno de carro incorporado nos seus dados.

sample.gitlocalhost:10022/root/
^^^^^^^^^^

Isso quer dizer que a string é a seguinte (usando a notação literal da string da linguagem C):

"ssh://git@localhost:10022/root/\rsample.git"

Observe o \r denotando um retorno de carro

Quando você envia isso para o terminal, o retorno de carro faz com que o cursor se mova para o início da linha, de modo que sample.git sobrescreve o prefixo ssh://... .

Para depurar esse tipo de problema de "saída misteriosa", você pode canalizar a saída do comando para um utilitário de despejo binário como od :

echo $strange | od -t c  # see characters with backslash notation, or -t x1 for hex
    
por 09.10.2015 / 19:05