As condições enviadas por ssh são realizadas localmente, não remotamente [duplicadas]

0

Então, estou tentando fazer algo assim:

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

Se eu fizer isso, a condição será executada localmente. O que significa que ssh analisa o número de arquivos em /mnt/dir localmente e não remotamente. Existe alguma maneira de contornar isso? Eu preciso fazer a condição remotamente.

    
por Ulukai 07.04.2016 / 19:44

1 resposta

2

Use aspas simples ao redor dele, isso evitará que o shell o expanda, e a string será processada intacta no outro lado

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/*'

Se você quiser usar algumas variáveis locais e fazer com que algumas partes sejam executadas remotamente, será necessário escapar das partes pelas quais deseja passar. Por exemplo, se você quiser que o nome do diretório esteja em uma variável que você possa fazer

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\"/*"
    
por 07.04.2016 / 19:48