ПРИМІТКА: Тут насправді є два шари до питання. Один - «Я хочу виконати нетривіальне завдання на віддаленому сервері, доступному через SSH». Інший - "Я намагаюся передати складний рядок команді, і аргумент в кінцевому підсумку відрізняється від того, що я задумав". Я відповідаю на запитання низького рівня, не обговорюючи, чи застосовується підхід "правильний" (зручний, не схильний до помилок, безпечний тощо) для вирішення такого рівня. Як вказують інші відповіді та коментарі, це цілком можливо не так.
Ваш командний рядок здебільшого правий; вам залишається лише трохи змінити цитування.
Основна проблема полягає в тому, що рядки з подвійним цитуванням розширюються вашою локальною оболонкою, і тому $(...)частини будуть оцінені у вашій локальній системі. Щоб передати їх у віддалену систему, вам слід укласти скрипт в окремі лапки.
У вас також є кілька вбудованих лапок. У вашому оригінальному сценарії є аргументи для двох echos; якщо змінити зовнішню пропозицію на одиничні, то це буде сценарій awk. Це ефективно призводить до опущення лапок, що не турбує echos, але це зіпсує сценарій awk, оскільки знак, що перевищує значення, стане перенаправленням на вихід. Тож після того, як ви поміняєте зовнішні лапки на одиничні, замініть їх на подвійні.
Це ваш сценарій з фіксованим цитуванням. У сценарію можуть бути інші проблеми, я просто виправив синтаксис.
#!/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'