Bash

通過 ssh 發送的條件在本地執行,而不是遠端執行

  • April 8, 2016

所以我正在嘗試做這樣的事情:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \
 /home/backupboy/.ssh/id_rsa user@server.com \
 "[[ $(ls -1 /mnt/dir | wc -l) -gt 4 ]] && rm /mnt/dir/*"

如果我這樣做,條件將在本地執行。這意味著ssh查看/mnt/dir本地而不是遠端的文件數量。有沒有辦法解決這個問題?我需要遠端處理條件。

在它周圍使用單引號,這將防止外殼擴展它,並且字元串將在另一側被完整地處理

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /home/backupboy/.ssh/id_rsa user@server.com '[[ $(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 user@server.com "[[ \$(ls -1 \"$path\" | wc -l) -gt 4 ]] && rm -- \"$path\"/*"

引用自:https://unix.stackexchange.com/questions/274959