나는TACACS+서버디버그 정보를 에 보냅니다 . 이 디버그 정보에서 특정 데이터 를 stderr
수집하려고 하므로 다음 stderr
으로 리디렉션합니다 stdout
. 그러나 를 실행하면 출력이 전혀 표시되지 않기 때문에 tac_plus -f /usr/local/etc/tac_plus.cfg 2>&1
실제로는 실행되지 않는 것 같습니다 . 반면에 예상대로 작동합니다.stdout
tac_plus -f /usr/local/etc/tac_plus.cfg 2>&1 | cat
( echo blah >&2 ) 2>&1 | tr 'a-z' 'A-Z'
$ ( echo blah >&2 ) 2>&1 | tr 'a-z' 'A-Z'
BLAH
$
누군가 이 동작을 설명할 수 있나요? 쉘은 bash 버전 4.2.37입니다.
답변1
우리가 보면원천report()
메시지를 인쇄하는 데 사용되는 함수를 stderr에 쓰거나 syslog(3)
기록하도록 구성할 수 있음을 알 수 있습니다. 또한 구성한 로깅 수준에 따라 달라집니다. 명령이 쓰기 또는 syslog 호출을 수행 중인지 확인할 수 있습니다. 예를 들면 다음과 같습니다.
strace -e write,connect -o /tmp/out tac_plus ...
tmp 파일에서 유사하거나 다른 숫자가 있는 행을 찾으십시오 . 아마도 stdout의 경우 1, stderr의 경우 2, 소켓을 열고 쓰기를 수행하므로 3 write(1,...
이상일 수 있습니다 .syslog
connect()