Remove quebra de linha extra de uma variável

2

Estouescrevendoumscriptemqueestoutentandoexportaralgumavariávele,depoisdeexportarminhavariávelquandoestouimprimindo,elaestáimprimindoumalinhaextradepoisdela.

Aquiestoulendodeumarquivocsvcontendoduascolunas.Estescriptestápresentenoarquivoscript.sheestouexecutandoessearquivo./script.sh

#!/bin/bashwhileIFS="," read f1 f2
do
      echo "Source IP        : $f1"     #it is printing without extra line
      echo "Destination IP   : $f2"               #it is printing without extra line  

    export sourceIP=$f1
    export destIP=$f2

    ssh -t -t sjain@$f1 <<ENDSSH
    #Start copying 33KB File
    echo "Destination IP Address: $destIP" # here it is printing an extra line after destIP
    startTime=$(($(date '+%s%N')/1000000))
    scp KB_33.txt sjain@$destIP:/home/sjain
    endTime=$(($(date '+%s%N')/1000000))
    printf 'Elapsed time in copying 33KB file: %s\n' $((endTime-startTime)) 
    #Write the stats to the file
    echo $sourceIP','$destIP',33KB,'$((endTime-startTime)) >> report.txt
    exit
    ENDSSH
done < ipaddress.csv

por causa do problema acima quando estou executando

scp KB_33.txt sjain@$destIP:/home/sjain

está quebrando o comando em duas partes, como esta

scp KB_33.txt sjain@$X.X.X.X
:/home/sjain

E quando estou codificando diretamente o valor em vez do destIP, ele está funcionando bem.

Como posso corrigir isso?

Dados do arquivo CSV de entrada

10.0.0.1,10.0.0.2
    
por saurav 12.03.2014 / 19:29

3 respostas

4

Quando você divide o conteúdo do seu arquivo CSV, está dividindo as vírgulas, , . Isso pode ser problemático porque o segundo endereço IP nesse arquivo provavelmente tem um caractere de nova linha após ele.

O método mais fácil de resolver isso seria simplesmente cortar esse caractere no final da variável $destIP da seguinte forma:

export sourceIP=$f1
export destIP=$(echo "$f2" | tr -d '\n')
    
por 12.03.2014 / 20:51
2

echo normalmente coloca uma nova linha depois de imprimir seus argumentos. Você pode evitar isso fazendo isso usando

echo -n "Destination IP Address: $destIP" 

para remover o $destIP que você pode tentar:

export destIP=$(echo $f2) 
    
por 12.03.2014 / 19:50
2

Você pode usar tr para excluir o caractere de nova linha. No lugar de sjain@$destIP , use:

sjain@$(echo $destIP | tr -d '\n')
    
por 12.03.2014 / 19:59

Tags