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

주위에 작은따옴표를 사용하면 쉘이 확장되는 것을 방지하고 문자열은 반대쪽에서 그대로 처리됩니다.

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

관련 정보