通过 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

在它周围使用单引号,这将阻止 shell 扩展它,并且字符串将在另一侧完整地处理

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

相关内容