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.

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 .