区切り文字までスクリプトを読み取り、パイプされたコマンドの結果をエコーし​​ます。

区切り文字までスクリプトを読み取り、パイプされたコマンドの結果をエコーし​​ます。

特定の文字列(たとえば)で区切られた複数行のパスワードクエリを含むパスワードスクリプトがあります-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

こんな!静かなデータ損失!

おすすめ記事