일부 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}