Bashでは、パイプラインの中間ノードの結果をどのように計算してキャプチャしますか?
たとえば、単一のBashパイプを使用して整数リストとコマンドまたは関数を指定した場合、リストを標準出力に出力しながら変数内のmaximum
整数リストの最大値をどのようにキャプチャできますか?
capture_maximum_and_print_numbers
以下のBashスクリプトでは、関数を単一のパイプになるように変更することがアイデアです。
function maximum {
awk 'NR==1||$0>x{x=$0}END{print x}'
}
function capture_maximum_and_print_numbers {
local numbers="3\n6\n1\n4\n2\n9\n5\n"
maximum=$(printf $numbers | maximum)
printf $numbers
}
capture_maximum_and_print_numbers
printf "maximum=$maximum\n"
ベストアンサー1
結果を厳密に変数に代入し、数値リストを1行の標準出力に出力する場合は、次のようなものを提供します。 (私はmax関数の名前を関数の機能に合わせて変更し、変数は保存された$maximum
結果自体に対応します):
function calc_max {
awk 'NR==1||$0>x{x=$0}END{print x}'
}
function capture_maximum_and_print_numbers {
local numbers="3\n6\n1\n4\n2\n9\n5\n"
export maximum=$(printf $numbers | tee /dev/tty | calc_max)
}
capture_maximum_and_print_numbers
echo max_result="$maximum"
#You have stored the max_result variable and can pass it to whatever you want.
tee
長いコマンドパイプラインの途中で、「現在」の結果を別のファイルに保存したり、標準出力に出力したりするなどの操作に使用できます。単一のパイプラインを別々のターゲットを持つ複数のコピーに分割し、同時に「プライマリ」パイプラインをチェーンの下に処理し続けます。
tee dev/tty
tty
現在の端末のパイプに対応し、/dev/tty
すべての* nixシステムに表示されます。