간단한 bash 스크립트가 있습니다 nc
.
#!/bin/bash
nc -k -l 127.0.0.1 4444 > filename.out
4444
포트 에서 연결을 수신합니다 TCP
. 가능하다면 수신된 데이터를 로 리디렉션하지 않고 filename.out
각 데이터 덩어리(텍스트 한 줄)를 script.sh
매개 변수로 전달하고 싶습니다. 어떻게 해야 하나요?
미리 감사드립니다.
편집: 나는 또한 다음을 시도했습니다.
#!/bin/bash
nc -k -l 127.0.0.1 4444 | /path/to/script.sh
하지만 이건 작동하지 않아
답변1
다음은 다중 입력 스크립트의 진입점입니다.
#!/bin/bash
[ $# -ge 1 -a -f "$1" ] && input="$1" || input="-"
# your script's payload here
#!
이 문장이 자명해지길 바라요
두 번째 줄에
$# -ge 1
하나 이상의 명령줄 인수를 테스트 중입니다.
-a
부울 값 및 연산자입니다.
-f "$1"
첫 번째 인수가 파일인지 테스트
&&
다음은 이전 조건이 참일 경우 실행될 명령입니다.
||
다음은 테스트 조건이 유지되지 않는 경우 발생하는 상황입니다.
nc -k -l 127.0.0.1 4444 > filename.out
my_processing_script filename.out
-또는-
nc -k -l 127.0.0.1 4444 | my_processing_script
따라서 매개변수가 있고 파일인 경우 입력은 파일이고, 그렇지 않은 경우 입력은 파이프에서 옵니다."-"
그러면 원하는 대로 작업을 실행할 수 있습니다. 누구나
제가 테스트한 페이로드는
awk '{print $2}' ${input}
내 입력은 netstat -rn
명령에서 나오며 어떤 방식으로든 작동합니다. 나는 그것이 당신이 요구하는 것이기를 바랍니다.