単純な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
#!
この文が自明になることを願っています。
2行目に
$# -ge 1
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
コマンドから来て、何らかの方法で動作します。私はそれがあなたが求めていることを願っています。