다음 명령을 실행하면 out1
출력 만 out2
있고 out3
비어 있습니다.
# this is just to generate a self-signed certificate
openssl genrsa -out /tmp/ssl.key 2048
openssl req -sha256 -new -key /tmp/ssl.key -out /tmp/ssl.csr -subj /CN=localhost
openssl x509 -req -days 365 -in /tmp/ssl.csr -signkey /tmp/ssl.key -out /tmp/ssl.crt
# works
openssl s_server -cert /tmp/ssl.crt -key /tmp/ssl.key -accept 444 > out1
# does not work, but if I run without '> out2' it works
openssl s_server -cert /tmp/ssl.crt -key /tmp/ssl.key -accept 446 | sed "s/ACCEPT/ACCEPT445/g" > out2
# does not work, but if I run without '> out3' it works
openssl s_server -cert /tmp/ssl.crt -key /tmp/ssl.key -accept 447 | grep ACCEPT > out3
sed 또는 grep에서 stdout 리디렉션이 실패하는데 리디렉션 없이 실행하면 작동하는 이유는 무엇입니까?
답변1
sed -u
( -l
BSD/Mac OSX 시스템에서) 및 옵션을 사용해 보세요 grep --line-buffered
.
답변2
당신은 실시간으로 기대 out2
하고 작성되는 것처럼 보이지만 파이프에서 EOF를 기다리는 것 같습니다 . 여기에는 실패가 없습니다.out3
sed
grep
다른 콘솔에서 종료하고 openssl
합계에 올바른 결과가 있는지 확인하십시오.out2
out3