NOTA: de fato, existem duas camadas para a pergunta aqui. Uma é 'Eu quero executar uma tarefa não trivial em um servidor remoto acessível via SSH'. O outro é: 'Estou tentando passar uma cadeia complexa para um comando, e o argumento acaba sendo diferente do que eu pretendia'. Estou respondendo à pergunta de baixo nível sem discutir se a abordagem usada é "correta" (conveniente, sem tendência a erros, segura etc.) para resolver a de alto nível. Conforme indicado pelas outras respostas e comentários, possivelmente não é.
Sua linha de comando está quase certa; você só precisa alterar um pouco as citações.
O principal problema é que as seqüências de aspas duplas são expandidas pelo shell local e, portanto, as $(...)
partes serão avaliadas no sistema local. Para passá-los para o sistema remoto, você deve colocar o script entre aspas simples.
Você também tem algumas aspas incorporadas. No seu script original, existem os argumentos para os dois echo
s; se você alterar a cotação externa para aspas simples, será o script awk. Isso efetivamente resulta na omissão das aspas, o que não incomoda os echo
s, mas atrapalha o script do awk, pois o sinal maior que se torna o redirecionamento de saída. Portanto, depois de alterar as aspas externas para aspas simples, altere-as para aspas duplas.
Este é o seu script com a citação corrigida. O script pode ter outros problemas, eu apenas corrigi a sintaxe.
#!/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'