구분 기호까지 스크립트를 읽고 파이프된 명령의 결과를 에코합니다.

구분 기호까지 스크립트를 읽고 파이프된 명령의 결과를 에코합니다.

특정 문자열(예:)로 구분된 여러 줄의 비밀번호 쿼리가 포함된 비밀번호 스크립트가 있습니다 -delmiter-.

각 세그먼트를 컨테이너의 암호 셸에 에코하고 쿼리의 출력과 암호 셸로 전송된 셸을 가져오고 싶습니다.

더미 코드를 사용하면 다음과 같습니다.

#!/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-'

스크립트를 이러한 조각으로 분할하고 루프를 실행하려면 어떻게 해야 합니까?

편집: 내 것은 import.cypher다음과 같습니다:

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-

답변1

-delimiter-빈 줄이어도 되나요 ?

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;

...

만일이 경우라면

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

그러면 라인을 읽는 데 (느리고) 나쁜 루프가 필요하지 않습니다 while read. 나쁜 점은 마지막 줄에 개행 문자가 없으면 그 줄은 다음과 같다는 것입니다.

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

이런! 조용한 데이터 손실!

관련 정보