Bash

管道 sed/grep 輸出不起作用

  • April 5, 2016

如果我執行下面的命令,只有out1輸出,out2andout3是空的。

# 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選項。

您似乎期望out2andout3被實時寫入,但是sed並且grep在管道中等待 EOF。這裡沒有任何問題。

從另一個控制台殺死並檢查您是否在和openssl中有正確的結果。out2``out3

引用自:https://unix.stackexchange.com/questions/274291