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=>")가 코드가 평가되기 전과 평가 후에 한 번씩, 두 번 표시되는 것을 볼 수 있습니다. 내가 원하는 것을 얻는 열쇠는 프롬프트가 다시 나타날 때까지 관찰하고 기다린 다음 종료하는 내 명령 끝에 무언가를 연결하는 것입니다 netcat
.
bash 터미널에서 이 명령을 수동으로 실행할 때 두 번째 프롬프트가 표시된 후 Ctrl-C를 누를 수 있지만 이는 TextMate 편집기의 확장 내에서 사용하기 위한 것입니다.
어떤 아이디어가 있나요?
답변1
귀하의 특정 사례에는 다른 두 가지 답변이 더 적절할 수 있다고 생각하지만 일반적인 질문에 답변하려면 끝에 다음을 추가할 수 있습니다.
netcat somemachine 5678 <code.txt |
while read ln;do
[ "${ln#user=>}" != "$ln" -a "$gotone" = true ] && exit
[ "${ln#user=>}" != "$ln" ] && gotone=true
echo "$ln"
done