所以我正在尝试做这样的事情:
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\"/*"