いくつかのLinuxツールがデフォルトでSTDOUTの代わりにSTDERRに書き込むのはなぜですか?

いくつかのLinuxツールがデフォルトでSTDOUTの代わりにSTDERRに書き込むのはなぜですか?

一部のLinuxユーティリティが「通常の」ジョブの出力をSTDOUTの代わりにSTDERRに送信するのはなぜですか?

たとえば、次のコマンドを実行すると(CentOS 7.3で):

/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg 1> /dev/null ; echo $?

終了状態が 0 でエラーがなくても、TTY で出力を表示できます。

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-1ef39414718640fe9f6ec0f6d65fdc3e
Found initrd image: /boot/initramfs-0-rescue-1ef39414718640fe9f6ec0f6d65fdc3e.img
done
0

他のプログラムでもこれを行うことができることがわかりました。良い説明があるかどうか疑問に思います。

参考までに、RPM%postスクリプトでこの行を呼び出す必要があり、「通常の」出力をリダイレクトして実際の/dev/null「エラー」タイプのメッセージのみをキャプチャしようとしています。この特定のコマンドは-q quietスイッチを提供しません。

ベストアンサー1

grub2-mkconfig通常、生成された構成ファイルは次の場所に書き込まれます。 標準出力これにより簡単にリダイレクトできます。ステータス情報の書き込み標準エラーリダイレクトされた出力を妨げるからです。このパラメータを代わりに使用する場合、後者の動作は変更されずに維持され、-o一貫性を保つために変更されていないままにする必要があります。

# grub2-mkconfig >/tmp/grub.conf.a
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-4.8.15-200.fc22.x86_64
Found initrd image: /boot/initramfs-4.8.15-200.fc22.x86_64.img
Found linux image: /boot/vmlinuz-4.4.14-200.fc22.x86_64
Found initrd image: /boot/initramfs-4.4.14-200.fc22.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-b764638bab7b90d16d0510c14a429d80
Found initrd image: /boot/initramfs-0-rescue-b764638bab7b90d16d0510c14a429d80.img
Found Fedora release 22 (Twenty Two) on /dev/sda2
done
# grub2-mkconfig -o /tmp/grub.conf.b
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-4.8.15-200.fc22.x86_64
Found initrd image: /boot/initramfs-4.8.15-200.fc22.x86_64.img
Found linux image: /boot/vmlinuz-4.4.14-200.fc22.x86_64
Found initrd image: /boot/initramfs-4.4.14-200.fc22.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-b764638bab7b90d16d0510c14a429d80
Found initrd image: /boot/initramfs-0-rescue-b764638bab7b90d16d0510c14a429d80.img
Found Fedora release 22 (Twenty Two) on /dev/sda2
done
# diff -u /tmp/grub.conf.{a,b}

おすすめ記事