SSHを介して送信された条件は、リモートではなくローカルで実行されます。

SSHを介して送信された条件は、リモートではなくローカルで実行されます。

だから私は次のようにします:

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\"/*"

おすすめ記事