Bash
管道 sed/grep 輸出不起作用
如果我執行下面的命令,只有
out1
輸出,out2
andout3
是空的。# 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 重定向標準輸出失敗,但在沒有重定向的情況下執行?
嘗試
sed -u
(-l
在 BSD/Mac OSX 系統上)和grep --line-buffered
選項。
您似乎期望
out2
andout3
被實時寫入,但是sed
並且grep
在管道中等待 EOF。這裡沒有任何問題。從另一個控制台殺死並檢查您是否在和
openssl
中有正確的結果。out2``out3