Executar para loop via ssh

1

Bom dia Todos,

Estou tentando executar um loop for via SSH. O loop é usado para obter o último login de cada usuário que possui uma conta no servidor,

ssh 172.20.2.1 '''for i in 'cat /etc/passwd | awk -F: '{print $1}''; do last -n 1 $i | sed -e '/^$/{N;d;}'; done'''

Estou recebendo o erro

    bash: -c: line 1: syntax error: unexpected end of file
   -bash: d: command not found
   -bash: }; done: command not found

Eu pesquisei no Google, mas não tive muito o que fazer.

Qualquer ajuda seria apreciada.

    
por jasmaar 21.12.2015 / 23:55

1 resposta

3

O erro é porque você está usando ''' para citar seu comando. Como você também está usando o único ' para citar seus comandos awk e sed , o shell acha que o comando acabou e fica confuso. Tanto quanto eu sei, não existe tal coisa como ''' ; os dois primeiros ' são ignorados, pois eles simplesmente definem uma string vazia e a última é tomada como uma cotação de abertura que é fechada pela cotação de abertura de seu awk . Você pode ver isso se observar como seu código é destacado em sua pergunta.

A solução mais simples é usar aspas simples para incluir o comando e aspas duplas para sed e awk . No entanto, você precisará escapar do $1 no script awk para que ele não seja interpretado como uma variável do shell. Você também está complicando as coisas sem motivo. Tudo o que você realmente precisa é:

ssh localhost 'cut -d: -f1 /etc/passwd | 
    while read i; do last -n 1 $i | sed -e "/^$/{N;d;}"; done'
    
por 22.12.2015 / 00:19