shell não está substituindo os valores das variáveis

0

Alguém pode me ajudar, o que está errado com o meu roteiro?

echo "Environment validation started"
ID='getValueFromFile "ID"'
echo $ID
FAILLOG=$HOME/$ID/logs/1.log
echo $FAILLOG
echo $HOME/$ID/logs/1.log
>$FAILLOG 

OUTPUT:

Environment validation started
JASONID
/logs/1.log
/logs/1.log
/logs/1.log: No such file or directory/home/gol/JASONID

idealmente echo deve dar algo assim certo?

/home/gol/JASONID/logs/1.log

adicionando saída bash -vx

+ echo $'JASONID\r'
JASONID
FAILLOG=$HOME/$ID/logs/1.log
+ FAILLOG=$'/home/gol/JASONID\r/logs/1.log'
echo $FAILLOG
+ echo $'/home/gol/JASONID\r/logs/1.log'
/logs/1.log
echo $HOME/$ID/logs/1.log
+ echo $'/home/gol/JASONID\r/logs/1.log'
/logs/1.log
    
por Jason 10.05.2018 / 13:16

1 resposta

4

Como @EricRenouf comentou, se o que for para ID tiver um retorno de carro ( \r ) no final, ele irá mangle a saída, movendo o cursor para o início da seqüência de caracteres, após o qual o resto irá substituir as partes principais.

Usando printf %q para ver os caracteres especiais:

ID=$'abcdef\r'
echo "$ID/123"
printf "%q\n" "$ID/123"

temos:

/123ef
$'abcdef\r/123'

Você pode usar expansões de parâmetro para remover o CR final:

ID=${ID%$'\r'}
echo "$ID/123"
printf "%q\n" "$ID/123"

( $'..' é IIRC fora do padrão, mas funciona no Bash e em outros.)

    
por 10.05.2018 / 13:24

Tags