读取脚本,直到分隔符并回显通过管道传输命令的结果

读取脚本,直到分隔符并回显通过管道传输命令的结果

我有一个密码脚本,其中包含由特定字符串(例如 )分隔的多行密码查询-delmiter-

我想将每个段回显到容器中的 cypher shell 中,并获取发送到 cypher shell 中的查询和 shell 的输出。

当使用虚拟代码时,它会是这样的

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

哎呀!无声数据丢失!

相关内容