Io-Redirection
為什麼有些 linux 工具預設寫入 STDERR 而不是 STDOUT?
為什麼某些 Linux 實用程序將“正常”操作的輸出發送到 STDERR 而不是 STDOUT?
例如,當我執行以下命令時(在 CentOS 7.3 中):
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg 1> /dev/null ; echo $?
即使退出狀態為零並且沒有錯誤,我也會在 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
開關。
grub2-mkconfig
通常將生成的配置文件寫入 標準輸出,以便您可以方便地重定向它。狀態資訊被寫入stderr,因為它會干擾重定向的輸出。當您-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}