La variable asignada dentro del comando ssh no devuelve el valor adecuado

La variable asignada dentro del comando ssh no devuelve el valor adecuado

Estoy ejecutando el siguiente comando en la sshparte de mi script. El comando está destinado a reducir el tamaño del archivo de lsla opción y almacenarlo en una variable. Luego imprima la variable:

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

Esto funciona bien cuando se ejecuta en la línea de comando.

Cuando intento el mismo comando dentro de un script a través de 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;"

Esto falla. Almacena algún valor temporal local y devuelve el mismo tamaño de archivo en lugar del correcto.

Respuesta1

Utilice un script para evitar estropear su comando con problemas de citas.

¡Es más limpio, más manejable y se ve mejor :)!

Por ejemplo, simplemente haz esto:

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

Contenido 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 "

No olvides agregar la ruta a tu local_script.sh:)

Respuesta2

No se pueden anidar comillas dobles dentro de otras comillas dobles sin utilizar un escape, y al poner comillas invertidas dentro de comillas dobles, se evalúan en la máquina local en lugar de en la remota.

Algo más como esto debería hacer lo que estás tratando de lograr:

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;"'

Tenga en cuenta que necesitaba cambiar '{ print $5 }'to "{ print \$5 }", escapando de $porque ahora está entre comillas dobles en lugar de simples y no quiero que $5el shell lo interprete.

información relacionada