내 서버에 공백으로 흩어져 있는 HL7 메시지가 포함된 파일이 있습니다. 아래 예. ctrl+c를 사용하여 스크립트가 중지될 때까지 연속 루프에서 한 번에 이러한 메시지 중 하나를 보내고 싶습니다. 나는 이것에 익숙하지 netcat
않지만 netcat을 직접 사용하려고 하면 다음과 같은 결과를 nc -l 10004
얻습니다.
ncat: bind to :::10004: Address already in use. QUITTING.
이 포트를 수신하는 장치에는 이미 Mirth 애플리케이션이 있습니다. 이것이 유일한 방법이라면 다른 장치에서 명령을 실행하여 이 장치로 정확하게 보낼 수 있지만 IP로 보내기를 사용 netcat
하고 간격을 두고 한 번에 하나씩 메시지를 보내는 데 도움이 필요합니다.
MSH....
.......
.......
MSH....
.......
MSH....
.......
.......
.......
내가 추출하는 파일에는 두 줄 이상이 포함된 여러 메시지가 있지만 줄 바꿈으로 구분되어 있습니다. (공간)
답변1
Mirth 애플리케이션이 이미 포트 10004에서 수신 대기 중인 경우 실제로는 netcat
동일한 포트에서 수신 대기할 수 없습니다(이 -l
플래그는듣다). 어쩌면 포트를 듣기보다는 포트에 쓰기를 원할 수도 있습니다.
# Connect once and write many messages
( while :; do echo MSH....; sleep 3; done ) | nc -vvv localhost 10004
또는
# Connect for each message
( while :; do echo MSH.... | nc -vvv localhost 10004; sleep 3; done )
다양한 구현이 있다는 점에 유의하십시오 netcat
. 각 구현은 서로 다른 플래그 하위 집합을 처리하는 것 같습니다.
귀하의 질문에 대한 새로운 정보를 바탕으로 가능한 또 다른 해결책은 다음과 같습니다.
MESG=
while IFS= read -r LINE || test -n "$MESG"
do
if test -n "$LINE"
then
# Build the message block
test -z "$MESG" && MESG="$LINE" || MESG=$(printf "%s\n%s" "$MESG" "$LINE")
continue
fi
# Send the message block to the service
echo "$MESG" | nc -vvv localhost 10004
MESG=
sleep 3
done < /path/to/your/messagefile.txt