NOTA: de hecho, hay dos capas para la pregunta aquí. Una es 'Quiero ejecutar una tarea no trivial en un servidor remoto accesible a través de SSH'. La otra es "Estoy tratando de pasar una cadena compleja a un comando, y el argumento termina siendo diferente de lo que pretendía". Estoy respondiendo la pregunta de bajo nivel sin discutir si el enfoque utilizado es "correcto" (conveniente, no propenso a errores, seguro, etc.) para resolver el de alto nivel. Como lo indican las otras respuestas y comentarios, posiblemente no lo sea.
Su línea de comando es mayormente correcta; solo tienes que cambiar un poco la cita.
El problema principal es que las cadenas de comillas dobles son expandidas por su shell local, por lo que las $(...)
partes se evaluarán en su sistema local. Para pasarlos al sistema remoto, debe encerrar el script entre comillas simples.
También tiene algunas comillas incrustadas. En su guión original, hay argumentos para los dos echo
s; si cambia la cita externa a comillas simples, será la secuencia de comandos awk. Estos resultados resultan en la omisión de las comillas, lo que no molesta a la echo
s, pero desordenará el script awk, ya que el signo mayor que se convertirá en redirección de salida. Entonces, después de cambiar las comillas externas a comillas simples, cámbielas a comillas dobles.
Este es su script con la cita fija. El script puede tener otros problemas, solo arreglé la sintaxis.
#!/bin/bash
ssh -t test@192.168.94.139 'cd /var/www/test.com/backup ;
if [ $(ls | wc -l) -lt 3 ]
then
echo "Less"
else [ $(ls -t *.tgz|awk "NR >3"|xargs rm -f) ]
echo "deleted"
fi'