亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2152 | 回復(fù): 6
打印 上一主題 下一主題

請(qǐng)教 如何關(guān)閉輸出時(shí)的緩存 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-04-26 17:37 |只看該作者 |倒序?yàn)g覽
本帖最后由 hujysh 于 2012-04-26 17:38 編輯

本來(lái)以為shell中輸出的時(shí)候沒有緩存,直接即時(shí)輸出的
可是碰到這個(gè)例子
  1. #!/bin/sh

  2. (
  3.   echo 1111111111111111111
  4.   echo 2222222222222222222
  5.   echo 3333333333333333333
  6.   echo 4444444444444444444
  7.   echo 5555555555555555555
  8.   echo 6666666666666666666

  9.   sleep 9

  10.   echo DONE
  11.   ) \
  12.     | awk '(!($0 ~ " ABCD ") || $0 ~ "WWWWWWWWWWWW from XXXXXX" || $0 ~ " REM ")' \
  13.     | sed "s/\(^..:..:.. SQL> \).*REM \(.*\)/\1REM \2/" \
  14.     | sed "s/\(^..:..:.. SQL> \).*REM \(.*\)/\1REM \2/"      


  15. exit 0
復(fù)制代碼

運(yùn)行時(shí)候 等了約9秒才看到輸出 1 到6
如果去掉第二句的sed,則很快看到 1到5  但是要約9秒才看到 輸出6
如果去掉兩句sed,則可以很快看到所有的 1到6

請(qǐng)牛牛們解釋一下。

我在一個(gè)shell中是有這樣類似的幾層管道的,又希望即時(shí)看到輸出,有什么辦法嗎?

論壇徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年紀(jì)念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役紀(jì)念章
日期:2022-04-24 14:33:24
2 [報(bào)告]
發(fā)表于 2012-04-26 17:43 |只看該作者
sleep 9在實(shí)際的代碼中有什么用處?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-04-26 17:46 |只看該作者
sleep 9 實(shí)際沒有的,是專為測(cè)試加的。
因?yàn)槲业膽?yīng)用中有一塊運(yùn)行時(shí)間較長(zhǎng),有多個(gè)語(yǔ)句,相當(dāng)于一段時(shí)間后才看到后面的 DONE。 而我的困惑是它在sleep前面的也不即時(shí)輸出。
回復(fù) 2# Shell_HAT


   

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2012-04-26 18:01 |只看該作者

經(jīng)過(guò)測(cè)試,知道了問(wèn)題來(lái)自于 sed , 如果改用awk ,不用sed  可以解決這個(gè)問(wèn)題。

sed在緩存方面的機(jī)制 我不明白。好在我的問(wèn)題可以不用它。

論壇徽章:
1
辰龍
日期:2014-05-22 11:38:58
5 [報(bào)告]
發(fā)表于 2012-04-26 21:40 |只看該作者
  1. #!/bin/sh

  2. (
  3.   echo 1111111111111111111
  4.   echo 2222222222222222222
  5.   echo 3333333333333333333
  6.   echo 4444444444444444444
  7.   echo 5555555555555555555
  8.   echo 6666666666666666666

  9.   sleep 9

  10.   echo DONE
  11.   ) \
  12.     | awk '(!($0 ~ " ABCD ") || $0 ~ "WWWWWWWWWWWW from XXXXXX" || $0 ~ " REM "){print;fflush()}' \
  13.     | sed -u "s/\(^..:..:.. SQL> \).*REM \(.*\)/\1REM \2/" \
  14.     | sed "s/\(^..:..:.. SQL> \).*REM \(.*\)/\1REM \2/"      


  15. exit 0
復(fù)制代碼
  1. man awk
  2.        fflush([file])        Flush any buffers associated with the open output file or pipe file.   If
  3.                              file  is  missing,  then standard output is flushed.  If file is the null
  4.                              string, then all open output files and pipes have their buffers  flushed.
復(fù)制代碼
  1. man sed
  2.        -u, --unbuffered

  3.               load minimal amounts of data from the input files and  flush  the  output  buffers  more
  4.               often
復(fù)制代碼
我的理解,awk和sed串在管道里時(shí),不是行緩沖方式,不會(huì)按行沖洗緩存,導(dǎo)致數(shù)據(jù)再awk積累。最后一個(gè)sed之所以不用指定緩沖方式,是因?yàn)樗切芯彌_方式,遇到換行就會(huì)輸出。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2012-04-27 09:50 |只看該作者
回復(fù) 5# winway1988


    你已經(jīng)把手冊(cè)看透了啊 呵呵

論壇徽章:
1
辰龍
日期:2014-05-22 11:38:58
7 [報(bào)告]
發(fā)表于 2012-04-27 11:25 |只看該作者
回復(fù) 6# g_programming


    呵呵、沒有,懷疑是緩沖的方式引起的,才查awk和sed是不是有相關(guān)的設(shè)置,grep也有類似的情況
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP