Variável atribuída dentro do comando ssh não retorna o valor adequado

Variável atribuída dentro do comando ssh não retorna o valor adequado

Estou executando o comando abaixo na sshparte do meu script. O comando tem como objetivo reduzir o tamanho do arquivo da lsopção e armazená-lo em uma variável. Em seguida, imprima a variável:

echo "Enter srouce file";
read src_file;
src_size =`ls -latr $src_file | awk  '{ print $5 }' `;
echo "The source file size is $src_size ";

Isso funciona bem quando é executado na linha de comando.

Quando tento o mesmo comando dentro de um script via ssh:

ssh user@server "echo "enterfile";read src_file;echo "enter path ";read path;cd $path;src_size=`ls -latr $src_file | awk  '{ print $5 }' ` ; echo The source file size is $src_size;"

Isso falha. Ele armazena algum valor temporário local e retorna o mesmo em vez do tamanho correto do arquivo.

Responder1

Use um script para evitar bagunçar seu comando com problemas de cotação.

É mais limpo, mais gerenciável e tem melhor aparência :)!

Por exemplo, faça isso:

echo "Enter source file"
read src_file
ssh user@server 'bash -s' < /path/to/local_script.sh "$src_file"

Conteúdo de local_script.sh:

#!/bin/bash
src_file="$1"
src_size =`ls -latr $src_file | awk  '{ print $5 }'`
echo "The source file size is $src_size "

Não se esqueça de adicionar o caminho ao seu local_script.sh:)

Responder2

Você não pode aninhar aspas duplas dentro de outras aspas duplas sem escapar - e, ao colocar crases entre aspas duplas, elas serão avaliadas na máquina local e não na remota.

Algo mais parecido com isto deve fazer o que você está tentando realizar:

ssh user@server 'echo "Enter file: "; read src_file; echo "Enter path: "; read path; cd $path; src_size=`ls -latr $src_file | awk  "{ print \$5 }"`; echo "The source file size is $src_size;"'

Observe que eu precisei alterar o '{ print $5 }'to "{ print \$5 }", escapando do $porque agora está entre aspas duplas em vez de simples e não quero que o $5seja interpretado pelo shell.

informação relacionada