Leia o script até o resultado do delimitador e do eco que é canalizado para o comando

0

Eu tenho um script cypher que consiste em consultas cypher de múltiplas linhas delimitadas por uma string específica, por exemplo. %código%.

Eu quero ecoar cada um desses segmentos no shell do cypher em um contêiner e obter a consulta que foi enviada para o shell do cypher e a saída do shell.

Ao usar um código simulado, seria assim

#!/bin/bash
while read $multilinesegment
do
   echo $multilinesegment
   docker exec -i neo4j_container /bin/cypher-shell -u user -p password --format=verbose
done <<< import.cypher #-delimitedby'-delimiter-'

Como posso dividir o script nesses segmentos e executar um loop com ele?

edite: Meu -delmiter- é assim:

match (a:Person)-[:Is_maried_to]-(b)
set b.last_name=a.last_name
return a,b;
-delimiter-
match (a:Person)-[:Is_maried_to]-(b)
set b.last_name=a.last_name
return a,b;
-delimiter-
match (a:Person)-[:Is_maried_to]-(b)
set b.last_name=a.last_name
return a,b;
-delimiter-
match (a:Person)-[:Is_maried_to]-(b)
set b.last_name=a.last_name
return a,b;
-delimiter-
    
por Thodi 15.12.2017 / 19:20

1 resposta

0

A -delimiter- pode ser uma linha em branco?

match (a:Person)-[:Is_maried_to]-(b)
set b.last_name=a.last_name
return a,b;

match (a:Person)-[:Is_maried_to]-(b)
set b.last_name=a.last_name
return a,b;

...

Se sim

awk 'BEGIN {
  RS=""
  command = "docker exec -i neo4j_container /bin/cypher-shell -u user -p password --format=verbose"
} {
  print | command
  close command
}' import.cypher

e então você não precisa do (lento e ruim) nas linhas de leitura while read loop. Ruim no sentido de que, se a última linha não tiver uma nova linha, essa linha é

(echo one; echo -n two) | while read l; do echo $l; done

whoops! perda silenciosa de dados!

    
por 15.12.2017 / 21:26