最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

awk中讓人郁悶的system()函數(shù)

 更新時(shí)間:2013年03月02日 19:45:52   作者:  
system()的結(jié)果是直接返回給shell顯示了,然后再由awk繼續(xù)執(zhí)行后面的程序,這種情況下,if()里留下的其實(shí)是system()的執(zhí)行狀態(tài)【即0或1】”0”~/^[2 3]/,當(dāng)然就一直執(zhí)行else了

發(fā)現(xiàn)一個(gè)特尷尬的事實(shí)。我辛辛苦苦去百度資料,想用rewrite實(shí)現(xiàn)針對(duì)不同域名源站故障后的自動(dòng)跳轉(zhuǎn)功能,但整個(gè)思路里遺漏了一個(gè)嚴(yán)重的問(wèn)題。

按我的思路,針對(duì)請(qǐng)求的url進(jìn)行一次curl,然后根據(jù)http_code去改寫(xiě)url或者原樣輸出——這也就意味著,每一個(gè)請(qǐng)求,squid都回源去取一次header。那么對(duì)于源站來(lái)說(shuō),前面squid的緩存率,就是0%!完全沒(méi)有效果。

得重新想過(guò)辦法……難道去看squid源代碼?汗

本著有頭有尾善始善終的原則,決定還是把原先那個(gè)雞肋想法寫(xiě)完。根據(jù)squid權(quán)威指南11章的說(shuō)法,傳遞給重定向器的流格式為:URL IP/FQDN IDENT METHOD,其中FQDN和ident經(jīng)常是空。METHOD,一般是GET和POST,squid只能緩存GET的數(shù)據(jù),但不能無(wú)視POST方式,因?yàn)橛袝r(shí)候POST數(shù)據(jù)header太大的話(huà),squid可能拒絕轉(zhuǎn)發(fā)這些內(nèi)容,這就不好玩了。

在明確這個(gè)格式以后(主要是草草收尾的想法影響下),我便覺(jué)得其實(shí)完全不用perl或者php來(lái)搞,簡(jiǎn)單的awk就足夠了——當(dāng)然,shell不行,因?yàn)閟hell不能從事這種流狀的行處理。

以下是本著我想法寫(xiě)的awk腳本:

復(fù)制代碼 代碼如下:

#!/bin/awk -f
{
  if(system("curl -o /dev/null -s -w %{http_code}" $1)~/^[2|3]/){
    print ":$1"
  } else {
    print ":http://www.baidu.com/"
  }
}

但是再度讓我郁悶的事情接連發(fā)生。

第一,不管我在{}中進(jìn)行什么操作,程序都把system()的結(jié)果print出來(lái)了;

第二,即使system()的結(jié)果是200,print出來(lái)的也是else{}的”http://www.baidu.com”;而如果我直接試驗(yàn)if(200~/^[2 3]/){}else{},結(jié)果就很正常!

試驗(yàn)過(guò)程如下:

復(fù)制代碼 代碼如下:

[rao@localhost ~]$ echo "http://www.google.com"|awk '{if(200~/^[2|3]/){ print ":"$1 } else{ print ":http://www.baidu.com/"}}'
:http://www.google.com
[rao@localhost ~]$ echo "http://www.google.com"|awk '{if(system("curl -o /dev/null -s -w %{http_code} "$1)~/^[2|3]/){print ":"$1 } else{ print ":http://www.baidu.com/"}}'
200:http://www.baidu.com/

思前想后,在百度大嬸的幫助下,終于搞明白一個(gè)問(wèn)題:system()的結(jié)果是直接返回給shell顯示了,然后再由awk繼續(xù)執(zhí)行后面的程序,這種情況下,if()里留下的其實(shí)是system()的執(zhí)行狀態(tài)【即0或1】”0”~/^[2 3]/,當(dāng)然就一直執(zhí)行else了。

糟糕的問(wèn)題是awk的getline,無(wú)法直接把system()的執(zhí)行結(jié)果導(dǎo)入awk的變量…除非我先system里>一個(gè)文件,然后getline<這個(gè)文件。MyGod!

而如果采用while(“curl” getline var)的執(zhí)行方式,如何傳遞shell變量進(jìn)去又成了問(wèn)題……唉

相關(guān)文章

最新評(píng)論

奉化市| 竹山县| 五大连池市| 荣成市| 台东市| 昭通市| 呼图壁县| 金沙县| 固阳县| 逊克县| 怀安县| 沧州市| 格尔木市| 阜阳市| 松滋市| 九江市| 延吉市| 东丰县| 科技| 共和县| 古浪县| 聂拉木县| 东兰县| 遵化市| 筠连县| 沅江市| 宜兴市| 涿鹿县| 阳信县| 渭南市| 靖安县| 岐山县| 威远县| 卢湾区| 云安县| 兰西县| 文成县| 托里县| 大丰市| 靖州| 阳春市|