
だから私は次のようにします:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \
/home/backupboy/.ssh/id_rsa [email protected] \
"[[ $(ls -1 /mnt/dir | wc -l) -gt 4 ]] && rm /mnt/dir/*"
これにより、条件がローカルで実行されます。これは、リモートではなくローカルでssh
ファイル数を確認することを意味します。/mnt/dir
この問題を解決する方法はありますか?リモートで条件を処理する必要があります。
答え1
周囲に一重引用符を使用すると、シェルが拡張されるのを防ぎ、文字列は反対側でそのまま処理されます。
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /home/backupboy/.ssh/id_rsa [email protected] '[[ $(ls -1 /mnt/dir | wc -l) -gt 4 ]] && rm /mnt/dir/*'
一部のローカル変数を使用して一部をリモートで実行するには、渡したい部分をエスケープする必要があります。たとえば、ディレクトリ名を変数に含めるには、次のようにします。
path=/mnt/dir
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /home/backupboy/.ssh/id_rsa [email protected] "[[ \$(ls -1 \"$path\" | wc -l) -gt 4 ]] && rm -- \"$path\"/*"