La variable asignada dentro del command ssh no devuelve el valor correcto

Estoy ejecutando el siguiente command en la parte ssh de mi script. El command está destinado a cortar el tamaño del file de la opción ls y almacenarlo en una variable. Luego imprime 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 command.

Cuando bash el mismo command 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 en lugar del tamaño correcto del file.

Solutions Collecting From Web of "La variable asignada dentro del command ssh no devuelve el valor correcto"

Use una secuencia de commands para evitar arruinar su command al citar problemas.

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

Por ejemplo, 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 🙂

No puede anidar comillas dobles dentro de otras comillas dobles sin escapingse, y colocando los puntos en las comillas dobles, se evalúan en la máquina local en lugar del control remoto.

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 count que tenía que cambiar '{ print $5 }' por "{ print \$5 }" , escapando de $ porque ahora está entre comillas dobles en lugar de solo y no quiero que el intérprete interprete los $5 .