Como definir saída heredoc para variável local [closed]

3

Estou tentando em um heredoc para definir sua saída para uma variável local da seguinte forma:

REMOTE_OUTPUT=$(ssh remote@server /bin/bash << EOF
  find my/path/ -type f -not -path my/path/*/ -type f -mtime -0 | while read filename; do
        if grep "ERROR" $filename; then
            filenamebase=$(basename "$filename")
            echo -e "\n----------------------------------------------------------\n\n$filenamebase failure:\n"
            grep -n "ERROR" "$filename" | sed G
        fi
    done
EOF)

Mas a variável permanece nula mesmo que o loop find & grep esteja correto e deva retornar uma saída.

(Caso contrário, eu também estaria interessado em escrever a saída do heredoc em um arquivo local.)

    
por Jokas 04.12.2015 / 10:22

2 respostas

6

Você precisa citar o marcador EOF , por exemplo, <<\EOF ou <<'EOF' para parar sua variável $filename seja avaliada antes de ser passada para o controle remoto. Você pode ver o efeito com digamos /bin/bash -v em vez de /bin/bash .

Eu também precisava ter o marcador EOF real em uma linha própria, com o% final) na próxima linha.

    
por 04.12.2015 / 10:48
0

Este é um exemplo genérico, mas eu consegui realizar a mesma coisa com o nslookup interativo:

output_text='nslookup<<-monkies
      www.google.com
      exit
      monkies'
echo "Output: $output_text"

Ao envolver o comando inteiro no tils, a saída pode ser armazenada em uma variável. Nem sempre é bonito (dependendo do comando executado pelo heredoc), mas funciona.

Isso resolveu o problema que eu estava tendo em armazenar a saída heredoc para uma variável no bash.

    
por 21.06.2018 / 16:48