CATATAN: sebenarnya ada dua lapisan untuk pertanyaan di sini. Salah satunya adalah 'Saya ingin menjalankan tugas non-sepele pada server jauh yang dapat diakses melalui SSH'. Yang lain adalah 'Saya sedang mencoba memberikan string yang kompleks ke sebuah perintah, dan argumennya akhirnya berbeda dari yang saya maksudkan.' Saya menjawab pertanyaan tingkat rendah tanpa membahas apakah pendekatan yang digunakan adalah "benar" (nyaman, tidak rentan kesalahan, aman, dll.) Untuk menyelesaikan yang tingkat tinggi. Seperti yang ditunjukkan oleh jawaban dan komentar lain, sangat mungkin tidak.
Baris perintah Anda sebagian besar benar; Anda hanya perlu mengubah sedikit penawaran.
Masalah utama adalah bahwa string yang dikutip ganda diperluas oleh shell lokal Anda, dan $(...)
bagian - bagian tersebut akan dievaluasi pada sistem lokal Anda. Untuk meneruskannya ke sistem jarak jauh, Anda harus melampirkan script dalam tanda kutip tunggal.
Anda juga memiliki beberapa tanda kutip yang tertanam. Dalam naskah asli Anda, ada argumen untuk keduanya echo
; jika Anda mengubah kutipan luar menjadi kutipan tunggal, itu akan menjadi skrip awk. Ini secara efektif menghasilkan tanda kutip yang dihilangkan, yang tidak mengganggu echo
huruf s, tetapi akan mengacaukan skrip awk, karena tanda yang lebih besar dari itu akan menjadi pengalihan output. Jadi setelah Anda mengubah tanda kutip luar menjadi tanda kutip tunggal, ubah tanda kutip menjadi dua.
Ini adalah skrip Anda dengan kutipan tetap. Script mungkin memiliki masalah lain, saya baru saja memperbaiki sintaks.
#!/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'