While loop no comando ssh

0

Eu tenho o requisito de conectar-me à máquina remota e, em seguida, obter informações e pipe para while loop.

ssh [email protected] "find ~/listfile/ -iname \"*log*\" |while read line; do cat $line; done"

Os comandos acima estão imprimindo linhas vazias. Eu tentei find em si para verificar o comando e ele funciona e lista arquivos.

ssh [email protected] "find ~/listfile/ -iname \"*log*\""

Como vejo o conteúdo dos arquivos encontrados?

    
por venkata rao 20.09.2017 / 06:39

2 respostas

0

Você deve usar find sozinho se for listar arquivos com nome correspondente onde você ssh no servidor remoto e adicionar somente se os arquivos -type f .

ssh USER@HOST 'find ~/listfile/ -type f -iname "*log*" '

Se você precisar de cat do conteúdo dos arquivos encontrados, use find com cat da seguinte maneira.

ssh USER@HOST 'find ~/listfile/ -type f -iname "*log*" -exec cat '{}' +' 
    
por 20.09.2017 / 07:19
0

I know it won't strictly answer your question but will surely solve your problem in a very classy way.

Em vez de descrever seu comando na linha SSH , escreva como uma função Bash [1] :

function foo() { while true; do echo bar; done; } 

Em seguida, execute seu comando SSH usando o comando declare builtin [2] e depois chame sua função Bash :

ssh example.com "$(declare -f foo); foo;"

Você pode simplesmente escrevê-lo diretamente na linha de comando ou salvar em um arquivo e usar outro comando interno do Bash, source .

Bang! Você pode simplificar bastante a sua linha SSH sem ter que copiar um script Shell pela máquina remota.

    
por 20.09.2017 / 17:21