Bash
通過 ssh 發送的條件在本地執行,而不是遠端執行
所以我正在嘗試做這樣的事情:
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\"/*"