Estou tentando enviar um comando bash sobre SSH usando ssh -q $REMOTE -x "command"
.
Porque eu tenho vários comandos bash, estou usando << EOF
.
O problema é que o comando readlink me retorna uma string vazia quando atribuo seu resultado a uma variável. Quando eu chamo diretamente, não é.
Aqui está uma versão simplificada do meu código:
ssh -q $REMOTE -x << EOF
LINK="/path/to/my/link" # the link points to /path/to/my/file
readlink $LINK # outputs /path/to/my/file
TEST=$(readlink -f "$LINK")
echo $TEST # outputs an empty string
EOF
Nesse ponto, coloquei o mesmo código em um script de shell na máquina remota e tentei chamar o script de shell:
# local machine
ssh -q $REMOTE -x << EOF
./test-script
EOF
# remote machine "test-script"
LINK="/path/to/my/link" # the link points to /path/to/my/file
readlink $LINK # outputs /path/to/my/file
TEST=$(readlink -f "$LINK")
echo $TEST # outputs /path/to/my/file
De repente está funcionando, quando estou chamando o script remoto, tudo funciona bem, mas por que não está funcionando com o ssh?
linux
bash
ssh
symbolic-link
Typhon
fonte
fonte
Respostas:
Dentro do documento aqui, suas variáveis estão sendo avaliadas no lado da fonte. Se você quer que suas variáveis sejam avaliadas no lado do alvo, escape do $. Por exemplo,
Espero que isto ajude
fonte
De Manual de Referência Bash :
Então, ou escape
$
(gostar esta outra resposta diz) ou usar<< "EOF"
(com aspas); caso contrário sintaxe como$variable
e$(…)
será resolvido localmente.fonte