O problema é que as variáveis do shell
(das quais variáveis de ambiente são um subconjunto ou variante)
que são citadas entre aspas duplas ( "…"
) são processadas imediatamente.
Então, se ORANGE
estiver definido como 1 localmente,
como você relata ter feito em sua primeira experiência ,
e você digita
… ssh … "getId=$ORANGE; echo $ORANGE; ORANGE=$((ORANGE+1)); echo $ORANGE; …"
ssh
está recebendo
getId=1; echo 1; ORANGE=2; echo 1; …
E, se ORANGE
não estiver definido localmente,
como você relata ter feito sua segunda experiência , ssh
está recebendo
getId=; echo ; ORANGE=1; echo ; …
Para enviar o comando para o sistema remoto como você o digitou, complete com cifrões,
então ele será processado pelo shell no sistema remoto,
envolva-o entre aspas simples ( '…'
).
Por exemplo, se você disser
… ssh … 'echo orangeis $ORANGE'
então ssh
está vendo
echo orangeis $ORANGE
e enviando para o sistema remoto. Isso faz com que o shell no sistema remoto seja enviado para
orangeis
(com um espaço no final) porque você não fez nada para dar um valor a ORANGE
(ou, se você fez alguma coisa, não funcionou).
Você diz
I want to print
getId=1; echo 1; ORANGE=2; echo 1; …
que claramente não é o que você quer dizer. Se você quer dizer que quer imprimir
getId=1
1
2
︙
tente algo como
… ssh … 'ORANGE=1; getId="$ORANGE"; echo "getId=$getId"; echo $ORANGE; ORANGE=$((ORANGE+1)); echo $ORANGE; …"
Você refinou sua pergunta (nos comentários) para indicar que deseja manipular as variáveis de shell / ambiente no servidor remoto e que os valores alterados persistem de uma sessão para outra . Para fazer isso, você precisará armazenar explicitamente os valores em algum lugar (no servidor). Uma maneira simples de salvar um valor é executar
echo "$ORANGE" > orange.txt
Você pode recuperar esse valor com um comando como
read ORANGE < orange.txt
ou
ORANGE=$(cat orange.txt)
Uma abordagem ligeiramente diferente seria salvar seu valor com
echo "ORANGE=\"$ORANGE\"" > value.sh
e, em seguida, recupere-o com
. value.sh
IMNSHO, não faz sentido usar seu .bash_profile
para armazenar esses valores se você for modificá-los com frequência.
Observe que você deve usar >>
para anexar a um arquivo e >|
para sobrescrever um arquivo existente.