sed/grep 출력 파이핑이 작동하지 않습니다.

sed/grep 출력 파이핑이 작동하지 않습니다.

다음 명령을 실행하면 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( -lBSD/Mac OSX 시스템에서) 및 옵션을 사용해 보세요 grep --line-buffered.

답변2

당신은 실시간으로 기대 out2하고 작성되는 것처럼 보이지만 파이프에서 EOF를 기다리는 것 같습니다 . 여기에는 실패가 없습니다.out3sedgrep

다른 콘솔에서 종료하고 openssl합계에 올바른 결과가 있는지 확인하십시오.out2out3

관련 정보