Como manter a variável preserve enquanto executa o script através do ssh

0

Estou tentando executar o loop while com o comando ssh:

#!/bin/bash

ssh [email protected] "cat /var/log/syncer/rm_filesystem.log | while read path; do stat -c \"%Y %n\" "$path"  >> /tmp/fs_10.10.10.10.log done"

Mas o problema é que minha variável $ path está resolvendo no meu localhost onde como eu quero resolvê-lo no host remoto para que ele possa ler o arquivo no host remoto e tomar o stat de todas as pastas / arquivos listados em "rm_filesystem.log"

    
por Ali Raza 25.10.2013 / 14:07

3 respostas

0

Eu fiz isso funcionar de uma maneira boa como deveria ser:

! / bin / bash

ssh [email protected] "cat /var/log/syncer/rm_filesystem.log | while ler o caminho; fazer stat -c '% Y"% n "'" \ "'$ path' \" "> > /tmp/fs_10.10.10.10.log concluído "

Depois de ler a página do bash man, recebi este truque.

Obrigado a todos pela ajuda

    
por 27.10.2013 / 09:16
1

ou coloque a linha de comando ssh entre aspas simples, em vez de duplicar. então o comando será passado sem qualquer substituição no final local. ou seja,

ssh [email protected] 'cat /var/log/syncer/rm_filesystem.log | while read path; do stat -c "%Y %n" "$path"  >> /tmp/fs_10.10.10.10.log done'
    
por 25.10.2013 / 14:57
0

ssh user @ host "bash -s" < yourscript.sh

O que está acontecendo atualmente é que o script está sendo analisado em sua máquina local e enviado integralmente à máquina remota. Então, quando chegar lá, a variável $ PATH já terá sido substituída pelo valor de $ PATH local.

O que o exemplo acima faz é abrir uma sessão bash em sua máquina remota e definir o bash para ler a partir de stdin (veja link )

Você então passa o script (que você digitou em um arquivo externo) para que ele seja executado diretamente na máquina remota.

Dessa forma, não há análise local do script e, portanto, nenhuma substituição da variável de ambiente.

    
por 25.10.2013 / 14:26