私はいくつかの古い(Pentium 4)ハードウェアでPuppy-4.3.1 Linuxを使用しています。
私の命令を実行する能力が悪いですtee
。
このディストリビューションではtee
そうですBusyBox v1.15.0
。
たとえば、このコマンドは以下をtee
使用しません。0.05実行には秒がかかります。
cat "$my1megfile" | sha256sum
逆に、tee
プロセス置換を使用する場合は、次のものが必要です。15.36数秒で完了、307何倍もかかりました!
cat "$my1megfile" | tee >(sha256sum) >/dev/null
このビルドに問題があるのでしょうかBusyBox
、それとも私が間違っているのでしょうか?
tee
Bashで直接実装できますか?
コマンド(バイナリ)出力を2つの異なるコマンドにパイプする必要があります。その一つはsha256sum
。
答え1
最近はビジーボックス-1.32、これFEATURE_TEE_USE_BLOCK_IOミニプログラムのパフォーマンスを最適化するために使用される設定パラメータは、次のように設定されますtee
。「はい」基本的に:
config FEATURE_TEE_USE_BLOCK_IO
bool「バイトI / Oの代わりにブロックI / O(より大きい/高速)を有効にする」
デフォルト値yはTEEヘルプ
によって異なります。サイズを犠牲にしてより速いティーのためにこのオプションを有効にします。
存在するビジーボックス-1.15、同じパラメータが次に設定されます。「いいえ」基本的に。これはtee
、システムがゆっくり実行される理由を説明できます。ビジーボックス-1.15。
詳細は:
いつFEATURE_TEE_USE_BLOCK_IOはい設定なし、tee
入力の文字から文字のコピーを作成する(使用getCharacter())を出力に(プーケ()):
setvbuf(stdout, NULL, _IONBF, 0);
while ((c = getchar()) != EOF) {
fp = files;
do
putc(c, *fp++);
while (*fp);
}
いつFEATURE_TEE_USE_BLOCK_IOはい置く、tee
代わりにバッファリングされたコピーを使用してください。
while ((c = safe_read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
fp = files;
do
fwrite(buf, 1, c, *fp++);
while (*fp);
}