파일 내용을 캡처하여 다음으로 파이프하는 스크립트를 작성하려고 합니다 nc
.
$cat somefile.txt | nc server port
파일 내용은 예상대로 서버로 전송되지만 터미널에서는 서버의 응답만 볼 수 있습니다.
내가 보낸 내용을 보려면 어떻게 해야 하나요?
somefile.txt의 각 줄에 대해 다른 응답이 있으며 모든 것을 하나로 모으고 싶습니다.
답변1
tee
프로세스 대체를 사용하고 활용할 수 있습니다 .
$ cat somefile.txt | tee >(nc server port)
tee
그냥 복사하세요입력하다둘 다stdout
그리고하나의 문서.
<()
( 프로세스 대체)을 사용하면 파일 대신 쓰기 명령의 입력을 bash
알립니다 .bash
답변2
tee
프로세스 대체를 사용하고 피할 수 있습니다 .
$ ( cat somefile.txt | tee /dev/fd/3 | nc host port ) 3>&1
이것의 장점은 nc
동기적으로 실행할 수 있다는 것입니다. 다음은 비동기 프로세스 교체 동작의 예입니다.
user@hostname $ cat somefile.txt
GET / HTTP/1.0
Host: StackOverflow.com
user@hostname $ cat somefile.txt | tee >(nc stackoverflow.com 80); echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com
DONE
user@hostname $ HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]
"DONE"을 표시하고 출력 중간에 힌트를 그립니다. 동기적으로 실행하는 경우에는 문제가 되지 않습니다 nc
.
user@hostname $ ( cat somefile.txt | tee /dev/fd/3 | nc stackoverflow.com 80 ) 3>&1; echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]
DONE