出力に従ってプロセスを条件付きで終了します。

出力に従ってプロセスを条件付きで終了します。

REPL(読み取り評価印刷ループ)があります。クロレートネットワークソケットを受信するためのプログラミング言語です。ネットワーク経由でコードを送信すると、コードが評価され、回答が私に返送されます。このnetcatユーティリティを使用してコードを送信しています。

# send the contents of code.txt to port 5678 on somemachine
$ netcat somemachine 5678 <code.txt

私の問題は、私が使用したくないということですリングこのREPLの機能は何ですか?私の場合は、ワンタイムコマンドを実行してstdoutから応答を受け取り、それからコマンドを終了したいと思います(リモートシステムのREPLは引き続き実行する必要があります)。次の例は機能しますが、netcat終了せずにREPLに無期限に接続されています。

$ cat code.txt
(doseq [x (range 0 10)] (println (* x x)))
$ netcat somemachine 5678 <code.txt
user=> 0
1
4
9
16
25
36
49
64
81
nil
user=>

REPLプロンプト( "user =>")は、コードが評価される前と評価後に1回、2回表示されることがわかります。私が望むものを得るための鍵は、プロンプトが再び表示されるまで観察し、待ってから終了する私のコマンドの最後に何かを接続することですnetcat

bash ターミナルでこのコマンドを手動で実行すると、2 番目のプロンプトが表示されたら Ctrl-C を押すことができますが、これは TextMate エディターの拡張機能内で使用するためのものです。

どんなアイデアがありますか?

答え1

あなたの特定のケースでは、他の2つの答えがより適切かもしれないと思いますが、一般的な質問に答えるには、最後に以下を追加できます。

netcat somemachine 5678 <code.txt |
    while read ln;do 
      [ "${ln#user=>}" != "$ln" -a "$gotone" = true ] && exit
      [ "${ln#user=>}" != "$ln"  ] && gotone=true
      echo "$ln"
    done

関連情報