그래서 나는 다음과 같이하려고합니다 :
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\"/*"