私は次のことをしています。
declare -Ft handle_format_output &>/dev/null && exit 1 # test if this function name is already present in this scope
handle_format_output() {
case $1 in
domain) ./scripts/idn_to_punycode.pl >>"${2}_${1}.txt" ;;
ipv4)
# read doesn't bother w/ pipe input as its undefined: guessing it's leading to pipe breaks
# therefore open stdin as a separate file and read from it to close the previous pipe
while IFS= read -r line <&3; do
case $line in
*/*) printf "%s\n" "$line" >>"${2}_${1}_cidr.txt" ;; # cidr block
*-*) ipcalc "$line" >>"${2}_${1}_cidr.txt" ;; # deaggregate ip range
*) printf "%s\n" "$line" >>"${2}_${1}.txt" ;; # ip address
esac
done 3< /dev/stdin
;;
ipv6) cat -s >>"${2}_${1}.txt" ;;
esac
}
... |
mawk '!seen[$0]++' | # filter duplicates and blank lines
handle_format_output "$format" "$color"
入力は、Webドメイン、IPv4アドレス、IPv4 CIDRブロック、またはIPv6アドレスである可能性がある線形テキストです。形式は「ドメイン」、「ipv4」、または「ipv6」です。色は「白」または「黒」です。
何を試しても、次のエラーが発生し続けます。
mawk: write failure (Broken pipe)
mawk: close failed on file /dev/stdout (Broken pipe)
Error: Process completed with exit code 2.
私は何が間違っていましたか?
答え1
私はそれを考えた!一部のフォーマットデータフィールドは「ipv4」ではなく「ivp4」です。今、私はうまく構築するのになぜそれほど長い時間がかかったのか疑問に思います。ただし、問題を解決した後、通常のパイプラインが機能します。