ã¯ããã«
ã·ã§ã«èžã¯å¯èªæ§ãäœãã§ããã·ã§ã«ã¹ã¯ãªããã§äœ¿ãã¹ãæžãæ¹ã§ã¯ãããŸãããïŒããããã·ã§ã«èžã¯ã·ã§ã«ã¹ã¯ãªããã§äœ¿ããã®ã§ã¯ãªãã£ãã¯ãã§ããïŒïŒãã®èšäºã¯ãã®ããšãã¯ã£ãããšäŒããããã«æžããŸããã
ã·ã§ã«èžãšã¯ã䞻㫠UNIX ç³»ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ãããŠããŠã¹ã䜿ããããœãŒã¹ã³ãŒããæ®ãããGUI ããŒã«ãç«ã¡äžããéããªãããããã調æ»ã»èšç®ã»ããã¹ãåŠçã CLI 端æ«ãžã®ã³ãã³ãå ¥åäžæã§çµããããããšããããã§ããäžè¬çã«ã¯ã¯ã³ã©ã€ããŒã®ããšã§ããã詳现ã¯ä»ã®èšäºã«äžžæãããŸãã
- ã·ã§ã«èž | äžç°éäžã®ä»äºãšã
- ãã·ã§ã«èžäººãžã®éãã·ã§ã«èžäººã®ç¬¬äžæ©
ã·ã§ã«èžãšã·ã§ã«ã¹ã¯ãªããã®å€§ããªéãã¯å¯èªæ§ãšã¡ã³ããã³ã¹æ§ã®æç¡ã§ããã·ã§ã«èžã¯å¯èªæ§ãã¡ã³ããã³ã¹æ§ããã®ä»ãããããã¬ã³ç¡èŠããäžè¡ã§ãã£ãŠã¿ããããšãããèžãã§ãïŒå人çãªææ³ã§ãïŒã念ã®çºã§ããäžè¡ã§æžããã·ã§ã«èžãæãè¿ããŠè€æ°è¡ã«ããã ãã§ã¯å¯èªæ§ãã¡ã³ããã³ã¹æ§ã¯äœãå€ãããŸããã
ã·ã§ã«ã¹ã¯ãªãããšããŠä¿åããããšãªãããã®å Žã§äœ¿ã£ãŠç Žæ£ãããšãããã®ã§ããã®ãªãã·ã§ã«èžã䜿ã£ãŠæ§ããŸããããããé·ã䜿ãç¶ãããä»ã®äººãã¬ãã¥ãŒãããå¥ã®äººãå°æ¥ä¿®æ£ããããªã©ã·ã§ã«ã¹ã¯ãªãããšããŠãã¡ã€ã«ã«ä¿åãããªã話ã¯å¥ã§ããã·ã§ã«ã¹ã¯ãªããã¯å¯èªæ§ãéèŠã§ããã·ã§ã«èžã¹ã¿ã€ã«ã§ã·ã§ã«ã¹ã¯ãªãããæžããŠã¯ãããŸããããã®äºãæç¢ºãªæ ¹æ ãšãšãã«ãã®èšäºã§æžããŠããŸããæ ¹æ ã®ãªã䞻匵ã§ã¯ãªããå±çå±ãè«çã®é£èºããããŸããã
ãšèšã£ãŠãã·ã§ã«èžã¹ã¿ã€ã«ã§ãã§ã«æžããŠããŸã£ããšãã人ããããšæããŸãã®ã§ããã®èšäºã§ã¯ã·ã§ã«èžãå¯èªæ§ã®é«ãã·ã§ã«ã¹ã¯ãªããã®åœ¢ã«ãªãã¡ã¯ã¿ãªã³ã°ããŠããæ¹æ³ã玹ä»ããŸããããšãã®èšäºã¯ã·ã§ã«ã¹ã¯ãªããã®èšäºã§ããå 容ã¯ã·ã§ã«ã¹ã¯ãªããã«éã£ã話ã§ã¯ãªãããã°ã©ãã³ã°å šè¬ã«åœãŠã¯ãŸã話ãªã®ã§ã·ã§ã«ã¹ã¯ãªããã«èå³ããªã人ã§ãèªã¿ç©ãšããŠã©ããã
ãã®èšäºã®çã
ãã·ã§ã«èžããäžéšã®äººã奜ãã§ããæžãæ¹ã®äžã€ã§ãããªããšæç¢ºã«ãåé¡ç¹ãææããããšã§ã·ã§ã«ã¹ã¯ãªããã«äœ¿ããã®ã§ã¯ãªããšåšç¥ããã®ãç®çã§ãã奜ã¿ã®ç¯çã«ããããæžãã"äººã®æè¡"ãã¯ãšããããããããçã¿åºãããã³ãŒãã¯å¯èªæ§ãã¡ã³ããã¹æ§ãäœããã®ã§ããã·ã§ã«èžã®å匷äŒïŒïŒïŒã¿ãããªã®ãããããã§ãããããºã«ãè§£ããŠããã ãã®ããã«èŠããŸãïŒèå³ããªã詳ããèŠãããã§ã¯ãªããšèšãèš³ãããŠãããŸãïŒããããªã¹ã 7 è¡ã§äœããã㪠ã³ãŒããŽã«ã ãšåããããã®ãã®ã§ãé ã®èšç·Žã«ã¯ãªããšã¯æããŸããã·ã§ã«ã¹ã¯ãªãããšããŠæ¥åã§äœ¿ããããªã³ãŒãã§ã¯ãããŸããã
ã·ã§ã«èžã¯äžãããã課é¡ããšãããã解決ã§ããã°ãããšããèãã§æžãããŠããããšãå€ãã现ããæã®å¯Ÿå¿ãã§ããŠããªãããšãå€ã ãããŸããæ¹è¡æåãå¶åŸ¡æåãªã©ç¹å®ã®æåãžã®å¯Ÿå¿ãçãã«ãªã£ãŠãããªã©ãç¹å®ã®ã±ãŒã¹ãžã®å¯Ÿå¿ãæããŠãããäŸå€åŠçãäžéå端ã ã£ããã§ãããããååãªãã¹ãããããŠããŸããïŒæ¬äººã¯ãã¹ãããã€ããã§ãæäœæ¥ã§ã¯ãã¹ããããããã¹ãããå 容ã蚌æãããã¹ãã³ãŒãããªãïŒããã®å Žã§å®è¡ããŠçµãããªãã察å¿ããŠãªãããŒã¿ãããŸããŸå«ãŸããŠããªããŠåããŠçµããã§ãããããé·ã䜿ãããŠããã°ããããããŒã¿ãæ¥ãããšããããããããŸããããã®ããã·ã§ã«èžã®ãããªäžéå端ã«ãªããã¡ãªã³ãŒããã·ã§ã«ã¹ã¯ãªããã§äœ¿ããšããããã°ãšããŠé¡åšåããŸããæ£çŽèŠãŠããŠäžå¿åããã©ããããã ãã ãããšããã³ãŒããæ¬åœã«åé¡ããªãã®ãé ãæ©ããã³ãŒããå€ãã§ãããŠã§ãã¢ããªãªã©äžç¹å®ã®äººãä»»æã®ããŒã¿ãéä¿¡ã§ããã·ã¹ãã ã§ãã®ãããªã³ãŒãã䜿ããããšç¹å®ã®å Žåã«é倧ãªåé¡ãåŒãèµ·ããããè匱æ§ã«ãªã£ãŠãããããªãããšæ°ãæ°ã§ã¯ãããŸããã
ã·ã§ã«èžã¹ã¿ã€ã«ã¯ã·ã§ã«ã¹ã¯ãªããã«ãšã£ãŠã¯é©åãªæžãæ¹ã§ã¯ãªããç§ã®ããã«ã·ã§ã«ã¹ã¯ãªããã§äœ¿ãããšãæ¹å€ããŠãã人ãããŸãã
èªå·±ç޹ä»
ãšèšã£ãŠãã©ãã®èª°ããããããªãäººãæ¹å€ããŠããŠãä¿¡çšãããªããšæãã®ã§ãŠã¶ããšæããŸããèªå·±ç޹ä»ãããŸããç§ã¯ ShellSpec ãšããã·ã§ã«ã¹ã¯ãªããçšã®ãŠããããã¹ããã¬ãŒã ã¯ãŒã¯ã 2019 幎ãããªãªãŒã¹ããŠããŸããRuby ã® RSpec ã®ã·ã§ã«ã¹ã¯ãªããçãç®æšã§ã·ã§ã«ã¹ã¯ãªãã補ã§ãããªãã髿©èœïŒã«ãã¬ããžå¯Ÿå¿ãªã©ïŒãšæ§èœïŒäžŠåå®è¡ãªã©ïŒãå®çŸããŠããŸããäºææ§ãäœããšããã·ã§ã«ã¹ã¯ãªããã®å€§ããªåé¡ãä¹ãè¶ã POSIX ã·ã§ã«ïŒdash, bash â§ 2.03, zsh â§ 3.1.9, ksh88 ãªã©ïŒãåãç°å¢ã§ããã°çµã¿èŸŒã¿æ©åšãå«ããŠã©ãã§ãåãããšãå®çŸããŸãããPOSIX ã«æºæ ããŠããã°çè«äžåãã¯ããšãããæºäžã®ç©ºè«ã§ã¯ãªãç¶ç¶çã«åäœç¢ºèªãããŠããŸãããããããåäœèŠä»¶ã¯ POSIX ã·ã§ã«ã ãã§ãã£ãŠåçš UNIX ã®ãããªããã©ã«ãã§ POSIX ã«æºæ ããŠãªãç°å¢ã§ããã®ãŸãŸåäœããŸããã³ãŒãã®è¡æ°ã¯ 1 äžè¡ãè¶ ããŸããé«ãã¡ã³ããã³ã¹æ§ãä¿ã£ãŠãããã·ã§ã«ã¹ã¯ãªãã補ã§ãããŸã§ã®èŠæš¡ãšæ©èœãšæ§èœãšäºææ§ïŒç§»æ€æ§ïŒãšä¿¡é Œæ§ãšã¡ã³ããã³ã¹æ§ãå®çŸããŠããœãããŠã§ã¢ã¯ä»ã«ã¯ãªããšèšã£ãŠãè¯ãã¬ãã«ã ãšèªè² ããŠãããŸãã
ShellSpec èªèº«ã ShellSpec ã§ãã¹ãããŠããŸãããäžã®äžã®ã·ã§ã«ã¹ã¯ãªããã§äœãããããŒã«ãã·ã¹ãã ã®å€ãã«ã¯ãã¹ãã³ãŒãããããŸããããã¹ãã³ãŒãããªããããªãœãããŠã§ã¢ã«äŒç€Ÿã®éèŠãªããŒã¿ãé ããããšã¯åºæ¥ããªãã§ãããïŒShellSpec ã®éçºã§ã¯ã£ãããšããããŸããããçŸç¶ã·ã§ã«ã¹ã¯ãªããã«ããäžãå€§èŠæš¡ãœãããŠã§ã¢ã®éçºå¹çã¯ææªãšèšã£ãŠããã»ã©äœããã®ã§ããããããã·ã§ã«ã¹ã¯ãªããã¯ãããããœãããŠã§ã¢ã®éçºã®ããã®èšèªãšããŠèšèšãããŠããŸãããééã£ãäœ¿ãæ¹ãªã®ã§åœç¶ã®è©±ã§ããããã®ããã§ä»ã®èšèªã§ç°¡åã«å®çŸã§ããããšãå¥ã®å¥åŠã§ç¬ç¹ãªææ³ãç·šã¿åºããŠèŠåŽããŠå®çŸããªããã°ãªããªããªããŸããã·ã§ã«ã¹ã¯ãªããã ãã䜿ããææ³ãªããŠãã®ã¯ãããŸããããããã®ææ³ã¯èª°ãæãã€ããªãã£ãçºæ³ã®è»¢æã«ããåªããææ³ãªã©ã§ã¯ãªããã·ã§ã«ã¹ã¯ãªããã®å¶éã§ä»æ¹ãªããã£ãŠãããã®ã§ããããã£ãŠçç£æ§ãæ§èœãäœããã®ã§ããä»ã®èšèªã§ãã·ã§ã«ã¹ã¯ãªãããšåãããšã¯åºæ¥ãŸããé©åã§ã¯ãªããã䜿çšããææ³ã®åè£ããå€ãããã§ããã·ã§ã«ã¹ã¯ãªãããç°¡åã§çç£æ§ãé«ããšæããã®ã¯å°ãããã¡ã ãã§ãããœãããŠã§ã¢ã®èŠæš¡ã倧ãããªãã°ãªãã»ã©èŠåŽã䌎ããŸããä¿¡é Œæ§ã®æ ä¿ãå°æ¥ã®æ©èœè¿œå ä¿®æ£ã«äŒŽãã¡ã³ããã³ã¹æ§ãšçç£æ§ãã·ã§ã«ã¹ã¯ãªããã§å®çŸããã®ã¯å°é£ãªã®ã§ä»ã®ããã°ã©ãã³ã°èšèªã䜿ãã¹ãã§ããã·ã§ã«ã¹ã¯ãªããã§éçºããªããã°ãããªãçç±ããªããªã倧ããªãœãããŠã§ã¢ã®éçºã«ã·ã§ã«ã¹ã¯ãªããã䜿ã£ãŠã¯ãããŸãããç§ã¯ã©ãããŠãã·ã§ã«ã¹ã¯ãªããã§éçºããããã®ããã£ãã®ã§ãå¥åŠãªææ³ãç·šã¿åºãçç£æ§ãšã¡ã³ããã³ã¹æ§ãç¶æãã工倫ãããªããèŠåŽããŠãã¹ããã¬ãŒã ã¯ãŒã¯ãéçºããŸãããïŒãŸã è²ã èšãããããšã¯ãããŸãããèªå·±ç޹ä»ãããªããé·ãã®ã§ãã®èšäºã®æåŸã«æžããŸãããïŒ
ããšç§ã¯ãã·ã§ã«ã¹ã¯ãªããã¯å€æ°ä»£å ¥ã§ = ã®ååŸã«ã¹ããŒã¹ã眮ããªãïŒïœ¥ïœ¥ïœ¥ã®æ¬åœã®çç±ãç¥ããšåªããææ³ãèŠããŠãããã®èšäºãæžãã人ã§ãããã®èšäºçµæ§ããºã£ãã®ã§ã
ããã€ãå°çãã®åé¡ç¹
å¯èªæ§ãäœã
以äžã®ã³ãŒã㯠bash ã§äœããã CMS ã§ãã bashcms2 ã® link_keywords.cgi ããã®æç²ã§ããå ã®ã³ãŒãããç¡æå³ïŒå®éšçã³ãŒãïŒãšãã®æ¶ãå¿ãïŒïŒãšæãããè¡ãåé€ããŠããŸãã
ã¯ã£ããèšã£ãŠãããªã«é·ãã³ãŒããèŠããããŠãäœããã£ãŠãããããããªãã§ãã
sed 's/%2C/\n/g' <<< ${QUERY_STRING} |
nkf --url-input |
sed -e '1s/keywords=//' -e 's/^[ ã]*//' -e 's/[ ã]*$//' |
nkf -w16B0 |
xxd -plain |
tr -d '\n' |
sed 's/..../\&#x&;/g' |
sed 's/\
/\n/g' |
awk '{print "<a href=\"/key.cgi?key="$1 "\">" $1 "</a>" }' |
sed '1iContent-Type: text/html\n'
ãã®ã³ãŒãã¯åŠçã®åºåããããããèªã¿é£ã°ããåºæ¥ãå šãŠã®ã³ãŒããèªãŸãªããšäœããã£ãŠããããåãããŸãããäœããã£ãŠããããå®è£ ã®å 容ããæ³åããªããã°ãããŸãããçããã¯ãã®ã³ãŒããèªãã§äœãã©ãå€ãã£ãŠããããäœããã£ãŠããã³ãŒããããé ã®äžã§ããã«æ³åã§ããã§ããããïŒå å®¹ãææ¡ããæ®µéããã³ãŒãã®ãè§£æäœæ¥ããå¿ èŠã«ãªããŸããã³ãŒããå®è¡ããŠéäžã®ããŒã¿ãåºåããŠã¿ãªããšäœãã©ããªã£ãŠãããããããªãã§ããããã³ãŒããèªãã ã ãã§ã¯ããããå®è¡ããŠç¢ºãããªããšãããªããªããªããããã¯å¯èªæ§ãäœã蚌æ ã§ãã
ããšå¯èªæ§ãšãããšæè¡çãªç¥èããªã人ã§ãèªããã³ãŒãã®ããšã ãšæã£ãŠãã人ãããããã§ããããã¯ééãã§ããæè¡çãªç¥èãããäººãæ¥œã«å å®¹ãææ¡ã§ããã®ãå¯èªæ§ãé«ãã³ãŒãã§ããæè¡çç¥èããªããã°å匷ããã°ããã ãã®è©±ã§æé·ãã人ã®å€æãåºæºãšããªããã°ãããŸãããæé·ãã人ã»ã©èªãã®ã«èŠããã³ãŒãã§ããã°äœããééã£ãŠãããšããã®ã¯èª¬æãããšããããããšã ãšæããŸããå¯èªæ§ã®é«ãã倿ã§ãã人ã¯ã³ãŒããèªãã人ã ãã§ãããã®è©±ã«ã€ããŠã¯ãã€ãèšäºãæžãããšæã£ãŠããŸãã
è©±ãæ»ããšèªãã®ã«èŠåŽããã®ã¯ãé çªãéã«ãªã£ãŠããããã§ãã
ãã®ã³ãŒããèªãæãäœããã£ãŠããããææ¡ â ã³ãŒãã®è©³çްãªå®è£ ãèªããã§ã¯ãªããã³ãŒãã®è©³çްãªå®è£ ãèªã â äœããã£ãŠããããææ¡ãã«ãªã£ãŠããŸã£ãŠããã¯ãã§ããäœããã£ãŠããããææ¡ããªããŸãŸææ¢ãç¶æ ã§ã³ãŒããèªãããšã«ãªããäžè¡äžè¡èã蟌ã¿ãªããå šãŠãèªãŸãªããã°ãããªãã®ã§ãæéãããã£ãŠããŸããŸãã
ã³ã¡ã³ããå ¥ããã°ãšæããããããŸãããã³ã¡ã³ãã¯ã³ãŒãã§ã¯ãããŸãããã³ãŒãã®å¯èªæ§ãäœãããšã«å€ããã¯ãªãããã®åé¡ãã³ã¡ã³ãã§ããŸãããŠããã ãã§ãã
ãã®ã³ãŒããæžããŠããæ¬äººããã®å Žã§äœ¿ãã ããªãããã£ãŠåœç¶ã§ããèªåã§æãã€ããããããããšãæžãããã§ããããäœããã£ãŠããããææ¡ãããäœæ¥ãå¿ èŠãããŸããããããä»ã®äººãå°æ¥ã®èªåããã®ã³ãŒããèŠãæã¯ãäœãã£ãŠãã ããïŒããã¹ã¿ãŒãå°ç¹ã§ãã
ãã¹ãã³ãŒããæžããªã
äžè¬çã«ãã¹ãã³ãŒãã¯é¢æ°ã«å¯ŸããŠãã®ã€ã³ã¿ãŒãã§ãŒã¹ããã¹ãããŸããããããã€ãã§å šãŠãã²ãšã€ãªãã«ãªã£ãŠãããããã¹ããè¡ãç®æããããŸããããã®ã·ã§ã«ã¹ã¯ãªããã¯çããã®ã³ãŒããã·ã§ã«ã¹ã¯ãªããã®ã»ãŒå šãŠã§ããããããã®ã¹ã¯ãªããã«é¢ããŠã¯ãã¹ãå¯èœãããããŸããããé·ããªãã°å®å šã«ãã¹ããäžå¯èœãšãªããŸãããã¹ããè¡ãç®æãšããã®ã¯ã€ã³ã¿ãŒãã§ãŒã¹ã§ããããããã€ãã§ç¹ãã§ãããšã€ã³ã¿ãŒãã§ãŒã¹ããããµãã«ãªã£ãŠããŸããããäŸãã°ãã€ãã®éäžãä¿®æ£ãããšãã®åŸã®ã³ãŒãã®å šãŠãå確èªããå¿ èŠãã§ãŠããŸãããããã£ã仿§ã®å€æŽã«åŒ±ãã®ããã€ãå°çã®ç¹åŸŽã§ãã
颿°ãäœãã®ãã³ãã³ãã«ããã®ãæ¬è³ªçã«ã¯åãã§ããããã颿°ãäœããã«å°ããã³ãã³ããããããäœãã°è¯ããšæããããããŸãããããã 1 ãã¡ã€ã« 1 颿°ç¶æ ã«ãªãã®ã§ã倿°ã®ãã¡ã€ã«ãå¿ èŠãšãªã管çã倧å€ã«ãªã£ãŠããŸããŸããæ¬è³ªçã«åãã§ããã°ã³ãã³ããäœãåã«ãŸã颿°ã§ããUNIX å²åŠã«ã¯ãäžã€ã®ããšãããŸãããããšããèãæ¹ããããŸãããã³ãã³ãã§ã¯äžã€ã®ããšãããã®ã¯çŸå®çã«ã¯äžå¯èœã§ããåäœã§å®è¡å¯èœãªã³ãã³ãã¯åæååŠçããªãã·ã§ã³è§£æãªã©ãå¿ èŠã«ãªã£ãŠããã®ã§æ¬åœã«äžã€ã®ããšã ãããã£ãŠãã³ãã³ããªããŠãŸãèŠãããŸããã颿°ã¯ã³ãã³ããããå§åçã«å°ãããã®ãªã®ã§ãäžã€ã®ããšãããŸããããããšãåºæ¥ãŸãã
åèãŸã§ã§ãã ShellSpec ã¯ããã 1 äžè¡äžããã¡ã€ã«æ°ã¯ 120 åã颿°ã®æ°ã¯ 1000 åã§ãããã®èŠæš¡ã®ãœãããŠã§ã¢ãšããŠã¯æªããªãæ°å€ã§ããããã¡ãªã¿ã«ã·ã§ã«ã¹ã¯ãªããã®ã¡ããªã¯ã¹ïŒã¹ãããæ°ã埪ç°çè€é床ãªã©ïŒãèšæž¬ãã ShellMetrics ãéçºããŠããŸãã®ã§ãå©çšãã ãããïŒåè 颿°ã®é©åãªé·ããšã¯ïŒ ããŒãã³ã»ãã¡ãŠã©ãŒæ°ã¯ãé·ãããæå³ãšå®è£ ã®åé¢ããããŠãã颿°åãéèŠã ãšææïŒ
ç§ã¯ãã®èŠåŸãæ¡çšããŠããçã颿°ãæžããããªã£ããå žåçã«ã¯æ°è¡ã [2]ãã³ãŒãã6è¡ãè¶ ãããšãããç§ã«ãšã£ãŠã¯é¢æ°ã®åããæãå§ãããã1è¡ã®ã³ãŒããããªã颿°ã§ããçãããªã[3]ã
ã³ãã³ãã®ããã«å€§ããªæ©èœãæã£ããã®ã¯ãã¹ãã®ãã¿ãŒã³ïŒç°å¢ã®æ¡ä»¶ãåŒæ°ãå ¥åããŒã¿ãªã©ïŒã®çµã¿åãããå¢ããŠããŸãã®ã§ãã¹ãã倧å€ã«ãªããŸããäžã€ã®ããšã ãããã颿°ãäœãå°ãããã¹ããããä¿¡é Œæ§ã®ãã颿°ã䜿ã£ãŠå€§ããªãã®ãäœãã®ãäžçªç°¡åãªå®è£ æ¹æ³ã§ãããŸã颿°ã䜿ããªããšã³ããã³ãŒãã倧éã«éç£ããããšã«ãªããèªãŸãªããã°ãããªãã³ãŒããå¢ãããã°ãèŠã€ãã£ãæã«ä¿®æ£ç¯å²ã倧ãããä¿®æ£ããåŸã®ãã¹ãã倧å€ã«ãªããŸããã³ãããããã³ãŒããèªãŸãªããŠè¯ãã®ã¯æžããæ¬äººã ãã§ããä»ã®äººã¯æ¬åœã«ã³ãŒããäžèŽããŠãããã調ã¹ãªããŠã¯ãããŸããããããéãããã£ãããããæå³çãªãã®ãªã®ãïŒã©ãããŠãããªã£ãŠããã®ãïŒãèªã¿è§£ããªããã°ãããŸããã
ä»ã«ã¯ã³ãã³ãã«ããŠããŸããšãå€éšã³ãã³ãåŒã³åºããšãªã£ãŠããŸãããã©ãŒãã³ã¹ãäžãããšããåé¡ããããŸãããã·ã§ã«å€æ°ã«ã¢ã¯ã»ã¹ã§ããªããšããå¶éããããŸããä»ã®èšèªã®ã©ã€ãã©ãªãšèãæ¹ã¯åãã§ãã圹å²ããšã«ããã€ãã®é¢æ°ããŸãšããã©ã€ãã©ãªãã¡ã€ã«äœãã°ããã®é¢æ°æ¯ã«ãã¹ãã³ãŒããæžãããšãåºæ¥ãŸãããçç£æ§ãä¿¡é Œæ§ãäžãããŸãã
ããã©ãŒãã³ã¹ãèœã¡ã
ã³ãã³ãããã€ãã§ã€ãªããšããã©ãŒãã³ã¹ãèœã¡ãŸãããã€ãééä¿¡ã®ã·ã¹ãã ã³ãŒã«ãšã³ãã³ããšããŠã®åŠçãšãããªãŒããŒããããå ããã®ã ããåœç¶ã§ãã
# ããŒã¿çæ
$ cat /dev/urandom | base64 | head -n 1000000 > data.txt
# time ã³ãã³ãã®åºåã« CPU 䜿çšçãå ãã ïŒæ³šæ bash å°çšïŒ
# 泚æ2 macOS ã® /bin/bash ã¯å€ããŠãã°ãããããã§ CPU 䜿çšçãæ£ãã衚瀺ãããªã
$ TIMEFORMAT="real %3lR user %3lU sys %3lS cpu %P%%"
# ãã¿ãŒã³1 ãã€ãã§ã€ãªãå Žå
$ time cat data.txt \
| sed 's/a/A/g;' | sed 's/b/B/g;' | sed 's/c/C/g;' | sed 's/d/D/g;' \
>/dev/null
real 0m0.537s user 0m1.850s sys 0m0.215s cpu 384.87%
# ãã¿ãŒã³2 ãã€ãã§ã€ãªããªãå Žå
$ time cat data.txt \
| sed 's/a/A/g; s/b/B/g; s/c/C/g; s/d/D/g;' \
>/dev/null
real 0m1.360s user 0m1.336s sys 0m0.073s cpu 103.59%
ãïŒãã¿ãŒã³ 1ïŒãã€ãã§ã€ãªãã å ŽåïŒã¯ãã¿ãŒã³ 2ïŒãã€ãã§ã€ãªããªãå ŽåïŒããã CPU æé ïŒuser + sys) ãå¢ããŠããŸãããã
宿é (real) ã¯ãã€ãã§ã€ãªãã æ¹ãçããããªããã£ãŠæããããããŸããããããã¯ãã®äŸã®åã³ãã³ãã®åŠçæéãåãã§ãããã«ããã¯ããååšããªãéœåã®ããäŸã ããã§ããå®éã®ã³ãŒãã§ã¯ãããªéœåã®ããç¶æ ã«ã¯ãªããŸããããŸããã€ãã§ã€ãªãã å Žåã«ã¯éããªã£ã代ããã«äœèšã« CPU ã䜿ã£ãŠããïŒ4 ã³ã¢äž 384.87%)ããšã«æ³šæããªããã°ãããŸãããä»ã®ããšãããäœåãç¡ããªã£ãŠããŸãããããŠéã«èšãã°ãã¿ãŒã³ 2 ã§ã¯äœåãæãïŒäœãããŠããªã CPU ã³ã¢ãããïŒãšããããšãªã®ã§ãäŸãã°ãã®åŠçãåæã« 3 ã€åããããšã§ 1 ã€ã®ããŒã¿ãåŠçããæéã§ 3 åã®ããŒã¿éãåŠçããäºãå¯èœã§ãããšããããšã«ãªããŸãã
ã§ã¯å°ãæãå ããŠã¿ãŸãããã
# ãã¿ãŒã³1 ãã€ãã§ã€ãªãå ŽåïŒããã«ããã¯ããïŒ
$ time cat data.txt \
| sed 's/a/A/g;' | sed 's/b/B/g;' | sed 's/c/C/g;' | sed 's/d/D/g;' \
| sed 's/[0-9]//g' >/dev/null
real 0m4.080s user 0m6.156s sys 0m0.493s cpu 162.97%
# ãã¿ãŒã³2 ãã€ãã§ã€ãªããªãå ŽåïŒããã«ããã¯ããïŒ
$ time cat data.txt \
| sed 's/a/A/g; s/b/B/g; s/c/C/g; s/d/D/g;' \
| sed 's/[0-9]//g' >/dev/null
real 0m3.789s user 0m5.194s sys 0m0.219s cpu 142.88%
ãã®ããã«ãå°ãå€ããã ãïŒããã«ããã¯ãšãªã sed 's/[0-9]//g' ã远å ïŒã§ç°¡åã«é転ããŠããŸããŸããæ¬åœã® CPU æé㯠user + sys ã§ãããã€ãã§ã€ãªããšãªãŒããŒãããã®åã ã CPU æéã¯å¿
ãå¢ããŸãããããŠãã€ãã©ã€ã³å
šäœã®å®æéã CPU 䜿çšçã¯ããã«ããã¯ã«å·Šå³ãããŸãããã«ãã³ã¢ CPU ã§è€æ°ã³ã¢ã«ããŸã忣ãããããšãã§ããã°å®æéãæžããããšã¯åºæ¥ãŸããã倱æããã°äžèšã®ããã«éã«å®æéã CPU æéãå¢ããŠãã¡ãªãããããªãç¶æ
ã«ãªããŸããäœã£ãŠã CPU ã¯äœ¿ãåããããªããŸãããäžèšã®äŸã§ã¯ããŒã¿åŠçä»¶æ°ãåããªã®ã« CPU 䜿çšçãå€ãããã§ ãCPU ã䜿ãåããã§ã¯ãªãç¡é§ã«ãCPU ãäœ¿ãæœ°ãã ç¶æ
ã«ãªã£ãŠããŸãããã€ãã«ãããªãŒããŒãããã远å ããã°ããã»ã© CPU ãç¡é§ã«äœ¿ã朰ããã®ã¯åœç¶ãªããã§ CPU 䜿çšçãå¢ãããããšãã£ãŠå¿
ãããè¯ãçµæã«ãªã£ããšã¯éããŸãããèŠããã«ã³ãã³ãããã€ãã§ã€ãªãã°äžŠååŠçãè¡ãããããæ£ãããããªããã°ããã©ãŒãã³ã¹ã¯äœäžãããšããããšã§ããã·ã§ã«ã¹ã¯ãªããã§ãã€ãã䜿ã£ãŠ"å¹ççã«"䞊ååŠçãããã®ã¯é£ãããäœãèããã«ãã€ãã§ã€ãªãã ãã§ããã©ãŒãã³ã¹ãäžãããããªãã®ã§ã¯ãããŸãããæ£ããç¥èãšèšæž¬ãå¿
èŠã§ããã·ã§ã«ã¹ã¯ãªããã«ãšã£ãŠããã€ãã¯éèŠãªæŠå¿µããšããã®ã¯ããããã£ãããšãå«ããŠæ£ããçè§£ãããšããããšã§ãããªããã€ãã©ã€ã³äžŠååã䜿ãããªããŠããã©ãŒãã³ã¹ãäžããæ¹æ³ã«ã€ããŠã¯å¥èšäºã§ãã£ãšè©³ãã解説ããŸãã
ãªãã¡ã¯ã¿ãªã³ã°åŸã®ã³ãŒã
ãªãã¹ãå ã®ã³ãŒããä¿ã£ããŸãŸé¢æ°ã«åå²ããŸãããQUERY_STRING ãæ£ããããŒã¹ããŠãªãã®ã§ããããã ãã ããæããŸãããçé¢ç®ã«ãããšé·ããªãäžã«çµå±ãŠã§ãã¢ããªã¯ã·ã§ã«ã¹ã¯ãªããã§äœããã®ã§ã¯ãªãã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãæã£ãŠããä»ã®èšèªã䜿ãã¹ããšããããããããªçµè«ã«ãªãã ããªã®ã§ä¿®æ£ããã«ãã®ãŸãŸã«ããŸãããã®èšäºã®ç®çã¯ã·ã§ã«ã¹ã¯ãªããã®æžãæ¹ãšãªãã¡ã¯ã¿ãªã³ã°ææ³ã®ç޹ä»ãªã®ã§ã
get_keywords() {
sed 's/%2C/\n/g' | nkf --url-input \
| sed -e '1s/keywords=//' -e 's/^[ ã]*//; s/[ ã]*$//'
}
escape_html() {
nkf -w16B0 | xxd -plain | tr -d '\n' \
| sed 's/..../\&#x&;/g; s/\
/\n/g'
}
output() {
sed "1iContent-Type: $1\n" # æ¬åœã¯ \r\n ã§ããã¹ã
}
get_keywords <<<$QUERY_STRING | escape_html | {
awk '{print "<a href=\"/key.cgi?key="$1 "\">" $1 "</a>" }'
} | output "text/html"
äžèšã®ã³ãŒããèªãã æã颿°ã®äžèº«ãèªã¿é£ã°ããŠé¢æ°åã ããèŠãŸããããïŒããã§ãã颿°ã®äžèº«ã¯èªã¿é£ã°ããŠããã®ã§ããèªã¿é£ã°ãã°èªãã¹ãã³ãŒããå°ãªããªãã®ã§äœããã£ãŠããã¯ããã«åããããšã§ããããéã«é¢æ°ã䜿ããªãå Žåã¯å šãŠãèªãŸãªããšãããªãã®ã§çè§£ããã®ã«æéãããããŸããããã¯ãã€ãã䜿ã£ãå Žåã®äŸããæããã§ããããã¡ãªã¿ã«ã§ãã颿°ã®äžèº«ã远ã£ãŠãããªããšå šäœãææ¡ã§ããªããããªã³ãŒãã¯ããããã颿°ã®æžãæ¹ãééã£ãŠããŸãã颿°ãæžãã®ã«ãæè¡åã¯å¿ èŠã§ããæ£ãã颿°ãæžããããã«èšç·ŽããŠãã ããã
å çšã®ããŒãã³ã»ãã¡ãŠã©ãŒæ°ã®ããã°ïŒã®ç¿»èš³ïŒããã®åŒçšã§ãã
ãããç§ã«ãšã£ãŠãã£ãšãçã«ããªã£ãŠãããšæãããã®ã¯ãæå³ãšå®è£ ã®åé¢ãšãããã®ã ããããããªã«ãããŠããã®ãçè§£ããã®ã«åªåããªããã°ãªããªãã³ãŒãã®äžéšåããã£ããšããããããã颿°ãšããŠåãåºãããã®ããªã«ãã«ã¡ãªãã ååãä»ããŠããŸãã®ã§ããã
ããããã°ãããäžåºŠãã®ã³ãŒããèªãã ãšãã«ããã®ã³ãŒãã®ç®çã¯ããããŸç®ã«é£ã³èŸŒãã§ããã ãããããã®é¢æ°ãããããšããŠããããšãããªãã¡é¢æ°æ¬äœã«æ³šæãæãå¿ èŠã¯ãªããªãã ããã
äžèšã®ã³ãŒãã¯ã$QUERY_STRING ãã get_keywords <<<ãããŠãescape_htmlãããŠãA ã¿ã°ã«æŽåœ¢ãããŠãoutput "text/html"ãããŠããã ãã§ããäœããã£ãŠãããææ¡ã§ãããšæããŸãããã®æç« ã«å®è£
ã®è©³çްïŒãããã©ããã£ãŠå®çŸãããïŒãå«ãŸããŠãªãããšã«æ°ã¥ããã§ããããïŒãªã«ããã£ãŠããããææ¡ããã®ã«å®è£
ã®è©³çްãç¥ãïŒèªãïŒå¿
èŠã¯ãããŸããããŸãç¥ãããã®ã¯ãäœããã£ãŠããããã§ãã£ãŠãã©ããã£ãŠå®çŸããããã§ã¯ãããŸããããã€ãã§ã€ãªãã ã³ãŒãã§ã¯ãããªãã©ããã£ãŠå®çŸããããšããå®çŸæ¹æ³ãèªãŸããããŠããŸããŸãã
ãã®ããã«äžé£ã®å®è£ ã颿°ïŒèšèªã«ãã£ãŠã¯ã¯ã©ã¹ãªã©ãå«ãïŒã«ããŠé©åãªååãã€ããããšããæœè±¡åããšèšããŸããå ·äœçãªå®è£ ãé èœãæœè±¡çãªååã§è¡šçŸããããã§ããå ·äœçãªå®è£ å 容ã¯ãŸãã¯ã©ãã§ãè¯ãããšã§ããããã¯å¿ èŠã«ãªã£ãæã«èªãã°è¯ããã®ãªã®ã§æåã¯èªã¿é£ã°ããŸãã颿°ããªããã°ã³ãŒãã®èªã¿é£ã°ããã§ããªãã®ã§èªãã®ã倧å€ïŒå¯èªæ§ãäœããšããããšã«ãªããŸãã颿°ã¯åå©çšæ§ãªã©ãããæœè±¡åã®æ¹ãéèŠã§ããã ããäžç®æã§ãã䜿ããªããããªå Žåã§ãå¯èªæ§ãäžããããã«é¢æ°ã«ããŸãã
åããã³ãŒããé·ããªã£ãŠãããšåè«ããããããããŸãããèªãã®ã¯é¢æ°åäœã§ããã³ãŒãã®ã¡ããªã¯ã¹ïŒè€é床ïŒã®èšæž¬ãããããšãæã人ãªãããããšæããŸããèšæž¬ã¯é¢æ°åäœã§ãããããŠç¹°ãè¿ããŸããïŒèªãå¿ èŠããªãæã¯ïŒé¢æ°ã®äžèº«ã¯èªã¿é£ã°ããŠæ§ããŸããããšãããããã¡ãã¡äœè¡ãèªãã§ãããŸãããã³ãŒãã¯ãã±ã£ã±ã£ã±ã§èªããªããã°ãããŸãããç§ã¯é¢æ°ã®ååïŒãšã³ã¡ã³ãïŒã ãã§äœããã£ãŠããããææ¡ããŸããå®è£ ã®è©³çްãèªãã®ã¯ãããå¿ èŠã«ãªã£ããšãã ãã§ãã
ããŠããã§ escape_html ã¯æ±çšé¢æ°ã§ãããªã®ã§ã©ã€ãã©ãªãã¡ã€ã«ã«ç§»åããããšã§ãã®ãã¡ã€ã«ããæ¶ãå»ãããšãåºæ¥ãŸãããã®ãããžã§ã¯ãã®æ§è³ªãã output ãæ±çšé¢æ°ã«ããŠè¯ãã§ããããããŒã¯ãŒãã®ååŸãæå®ããããŒãååŸããæ±çšé¢æ°ã«ãããšè¯ãããã§ãããããããšãã®ã¹ã¯ãªããã¯ãã£ãšçããã®ãªãã§ãããããããŸã§å
å®¹ãæžãããã°ãã®ã¹ã¯ãªããã®äžã«é¢æ°ãå®çŸ©ããªããŠãè¯ããªããããããŸããããããã£ãŠé¢æ°ãã©ã€ãã©ãªãšããŠå¥ãã¡ã€ã«ã«åé¢ãããšãã®ã¹ã¯ãªããã¯äžããäžãžãšåçŽã«åŠçãæµããã ãã®çããŠåçŽãªã·ã§ã«ã¹ã¯ãªããã«ãªããŸãã
ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«
ãã€ãã§ã€ãªãããšãšã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã¯çŽæ¥é¢ä¿ãªã話ã§ããã¯ãã§ãããã©ãã«ããã€ãã§ã€ãªãåæã®ã¹ã¿ã€ã«ã«èŠãããããé¢é£ã®è©±ãšããŠææããããšã«ããŸããã
ãã®åã«å¿µã®çºã§ããã³ãŒãã®æžãæ¹ã«å¯äžã®æ£è§£ãšããã®ãã®ã¯ãããŸããããã ãïŒã¿ããªããããŠããããèªåããããããšãã§ã¯ãªãïŒãã®æ¹ãèªã¿ããããšããçå±ãšä¿¡å¿µãæã£ãŠæžãããšã倧åã§ãããããé£ããã£ããä»ã®äººã®æžãæ¹ãšæèŠã®ããåãããã§ããªãã®ã§ããã°æ¢åã®ã³ãŒããã©ãŒããã¿ãŒïŒshfmt ãªã©ïŒã䜿ãã®ãè¯ãã§ããããæ¢åã®ã³ãŒããã©ãŒããã¿ãŒã®ã¹ã¿ã€ã«ãå¿ ãããæåã ãšã¯æããŸãããå€ãã®æèŠãåãå ¥ããããåãå ¥ããããåŠ¥åæ¡ã§ãããæ¡çšããããšã§ã¹ã¿ã€ã«ã«é¢ããç¡é§ãªæèŠã®è¡çªãæžãããŒã«ã§èªåçã«ã³ãŒããæŽåœ¢ããŠãããã®ã§æžãã®ã楜ã«ãªããŸãã瀟å ã®åé¢ä¿ã§åãããªäººãèããè¯ããšæããªããªã¬ãªã¬ã¹ã¿ã€ã«ãæŒãä»ããããããã第äžè ãææ¡ããã¹ã¿ã€ã«ã§ã¿ããªåŠ¥åããæ¹ã粟ç¥çã«ããã·ã§ãããïŒ
ç¶ç¶è¡ã®è¡é ãšæ«å°Ÿã® | ãæããã¹ã¿ã€ã«ã¯ããããïŒ
åè¿°ã®éãã¹ã¿ã€ã«ã¯å¥œã¿ãªã®ã§çµ¶å¯Ÿãããã¹ããšãããã®ã¯ãããŸããããç¶ç¶è¡ã®è¡é ãšæ«å°Ÿã® | ãæããŠæ¬¡ã®è¡ãè¡é ããæžãã¹ã¿ã€ã«ã¯èªã¿ã¥ãããšããã®ãç§ã®çµè«ã§ãã
nkf -w16B0 |
xxd -plain |
tr -d '\n' |
âããããæžãæ¹ã§ããããããã£ãŠè¡é ãš | ãæããã®ã¯ã³ã¡ã³ããå
¥ããããã ãããšæã£ãŠããŠããã®æžãæ¹ã§ããã° | ã®åŸãã«\ ãæžããªããŠã次ã®è¡ãç¶ç¶è¡ã«ãªãããã³ã¡ã³ããæžãããšãã§ããã®ã§ãããŸã§æªãã¯ãªããšã¯æããŸãããããã£ã±ãèªãã§ããŠç¶ç¶è¡ãªã®ãæ°ã¥ããªããªãããšãå€ãã§ããã³ã¡ã³ãã®äœçœ®ãæããããã® | ãŸã§ã®é·ã空çœãããã®ãèŠå ã§ãïŒèŠç·ç§»åã倧ãããŠã±ã£ãšèŠãæã«èŠããªãïŒãããšåã«æããã®ãé¢åãããã§ãã
nkf -w16B0 | # UTF16ãžã®å€æ
ãã®ããã«è¡æ«ã«ã³ã¡ã³ããå ¥ãããããšããã¡ãªããã¯ãããŸãããããããäžè¡ããšã«ã³ã¡ã³ããå ¥ããããšèªäœãããŸããããŸãããæ®ã©ã®å Žåã³ã¡ã³ãã¯é¢æ°ã¬ãã«ã§ååã§ããè¡ããšã®ã³ã¡ã³ãã¯ãã ã³ãŒãã®èª¬æã«ãªããã¡ã§äžè¬çã«äžèŠãªã³ã¡ã³ãã§ããããšãå€ãã§ããã³ã¡ã³ãã¯ã³ãŒããèªããªã人ãžã®ã³ãŒãã®èª¬ææã§ã¯ãããŸãããã³ãŒãã«æžããŠãªãããšãæžãã®ãã³ã¡ã³ãã§ãã
ã³ã¡ã³ãå ¥ããã®ã§ããã°ãã®çšåºŠãé©åã§ãã远å ã§å ¥åãåºåã®ä»æ§ãæžãã®ãè¯ãã§ãããã
# è¡ããšã« HTML ãšã¹ã±ãŒããè¡ãïŒASCII æåãå«ããŠå
šãŠã®æåãå®äœåç
§ã«å€æããïŒ
escape_html() {
nkf -w16B0 | xxd -plain | tr -d '\n' \
| sed 's/..../\&#x&;/g; s/\
/\n/g'
}
ããnkf -w16B0 ã®ãªãã·ã§ã³ã®æå³ãåããã¥ãããããšã³ã¡ã³ããæžããããªã£ãããããã¯é¢æ°ã«ãã¹ããšãããµã€ã³ãšèããããšãã§ããŸãã
# UTF16 ãžã®å€æ
to_utf16() { nkf -w16B0; }
é·ãã·ã§ã«ã¹ã¯ãªããã§ããèŠããããããããèšå®åŠçãããããããã¡ã€ã³åŠçãã¿ãããªã³ã¡ã³ãããããã颿°ã«ãã¹ããšãããµã€ã³ã§ããã³ãŒãã®å¯èªæ§ãé«ããã°ã³ã¡ã³ãã¯èªããšå°ãªããªã£ãŠãããŸãã
è©±ãæ»ããŸããšãè¡æ«ã« | ãæžãæžãæ¹ãèžãŸããã®ã§ããã°ããããŠä»¥äžã®ããã«ãã¹ãã§ãããã
nkf -w16B0 |
xxd -plain |
tr -d '\n' |
èªã¿ãããã®ä»ã«ããã®ããã«ããçç±ã®äžã€ã¯ shfmt ã§ãã®ããã«æŽåœ¢ïŒãããããã©ã«ãïŒããããšãã§ããããã§ããç¶ç¶è¡ã®è¡é ãš | ãæããã¹ã¿ã€ã«ã¯ shfmt ã§ã¯å¯Ÿå¿ããŠãããããããã£ãŠäžççã«ãã€ããŒãªã¹ã¿ã€ã«ã§ãããšèšããŸãã
ç§ã¯ Google ã®ã¹ã¿ã€ã« ãèžãŸããŠããïŒãšãããåãã ã£ãã ãïŒè¡æ«ã« \ ã«æžãç¶ç¶è¡ã®æåã« | ãæã£ãŠããã¹ã¿ã€ã«ã§ããããã ãšè¡ãèŠãç¬éã«åã®ã³ãã³ãã«ãã€ãã§ã€ãªããŠããããšãããããŸãããã ãäžè¡äžã³ãã³ããšããããã§ã¯ãããŸãããæšªã®é·ãã 100 æåã«ååŸã«åãŸã£ãŠããã®ã§ããã°ã瞊ã®è¡æ°ãçãæ¹ãã圢ãæããããããã³ãŒããææ¡ãããããšæã£ãŠããŸãããªããªãèŠç·ç§»åãã¹ã¯ããŒã«ãæžãããã§ãïŒå°èª¬ã¯çžŠæžãããæšªæžãã®æ¹ãèªã¿ãããã§ãããïŒïŒããã®æžãæ¹ïŒãªãã¡ã¯ã¿ãªã³ã°åŸã®ã³ãŒãïŒã¯ -bn ãªãã·ã§ã³ãå¿
èŠã«ãªããã®ã® shfmt ã®æŽåœ¢ãšççŸããŸãããïŒäžã€èšãèš³ããããš ShellSpec 㯠shfmt ãç¥ãåã«æžãå§ããã®ã§ shfmt ãšççŸããç®æããããŸãããããä¿®æ£ããŸããïŒ
ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã¯å¥œã¿ã®ç¯çã§ããããšã¯åŠããŸããããç¶ç¶è¡ã®è¡é ãšè¡æ«ã® | ãæããæžãæ¹ãå¯äžã®æ£ããã¹ã¿ã€ã«ã§ãããšåºãŸã£ãŠæ¬²ããã¯ãªãã®ã§èªã¿ã¥ããæžãæ¹ã§ãããšææããŠãããŸãããã®ãããªææãã¡ãããšããŠãªããšæ·±ãèããã«ç䌌ããŠããŸã人ãå¢ããŠããŸãã®ã§ãç§ã®ã¹ã¿ã€ã«ã¯èªã¿ããããšããæ ¹æ ïŒèŠç·ç§»åãã¹ã¯ããŒã«ãå°ãªãïŒããããŸãã
ãšããããæžããŸãããããããªããšãããã£ããš shfmt ãå°å ¥ããŠæŽåœ¢äœæ¥ã¯èªååããŸãããïŒ
ãªãã¡ã¯ã¿ãªã³ã°ææ³
ãã®ãªãã¡ã¯ã¿ãªã³ã°ææ³ã¯ã·ã§ã«èžã䜿ã£ãããã€ãå°çãããå¯èªæ§éèŠã®ã·ã§ã«ã¹ã¯ãªãããžæžãæãããšãã芳ç¹ã§æžããŠããŸããå Žåã«ãã£ãŠã¯ãã®é倿ãããæ¹ãè¯ãå ŽåããããŸããããšãã°é¢æ°ã«ããŠãã£ãããã©ãããããŸã§ããå¿ èŠããªããã°ãã€ãã©ã€ã³ã«çµã¿èŸŒããšããã®ããªãã¡ã¯ã¿ãªã³ã°ã§ããã©ã¡ãããããã¯äžæŠã«èšãããã®ã§ã¯ãªãã®ã§ãç¶æ³ã«å¿ããŠé©åã§ãããšèããæžãæ¹ãããŠãã ããã
é·ããã€ãã©ã€ã³ã¯é¢æ°ã«ããïŒ
ãªãã¡ã¯ã¿ãªã³ã°åŸã®ã³ãŒããèŠãŠãããã°ããããšæããŸããããã€ãã©ã€ã³ã®äžé£ã®ã³ãã³ãïŒãŸãã¯ã·ã§ã«é¢æ°ïŒã¯ãåçŽã«ã·ã§ã«é¢æ°ã«æœåºããããšãã§ããŸãã
äŸãã°ä»¥äžã®ã®çãäžã®ãããã¯ã颿°ã«ããã®ã§ããã°ããã®éšåã颿°ã«ç§»åããã ãã§ãã
sed 's/%2C/\n/g' <<< ${QUERY_STRING} |
nkf --url-input |
sed -e '1s/keywords=//' -e 's/^[ ã]*//' -e 's/[ ã]*$//' |
nkf -w16B0 |
xxd -plain |
tr -d '\n' |
sed 's/..../\&#x&;/g' |
sed 's/\
/\n/g' |
awk '{print "<a href=\"/key.cgi?key="$1 "\">" $1 "</a>" }' |
sed '1iContent-Type: text/html\n'
escape_html() {
nkf -w16B0 |
xxd -plain |
tr -d '\n' |
sed 's/..../\&#x&;/g' |
sed 's/\
/\n/g'
}
sed 's/%2C/\n/g' <<< ${QUERY_STRING} |
nkf --url-input |
sed -e '1s/keywords=//' -e 's/^[ ã]*//' -e 's/[ ã]*$//' |
escape_html |
awk '{print "<a href=\"/key.cgi?key="$1 "\">" $1 "</a>" }' |
sed '1iContent-Type: text/html\n'
æåŸã® | ã¯é¢æ°ã®äžã«å
¥ããªãã®ã§æ°ãã€ããŠãã ãããå¿
èŠãªãã°äœçœ®ãã©ã¡ãŒã¿ã®äžéšããŸãã¯å
šãŠãæœåºããã·ã§ã«é¢æ°ã«æž¡ãããšãã§ããŸãã
è€æ°ã®ã³ãã³ãã®é¢æ°ãžã®æœåºã¯ç°¡åãã€å®å šã«è¡ãããªãã¡ã¯ã¿ãªã³ã°ã§ãããæ¡å€æ°ã¥ãã«ããã®ã§ã¯ãªãã®ããªãšæã£ãŠããŸãã
é·ããã€ãã©ã€ã³ãã°ã«ãŒãã«ããïŒ
颿°ã«ãããŸã§ããªããªãšæãå Žå㯠{} ã§ã°ã«ãŒãã«ããããšãã§ããŸããå¿
ããµãã·ã§ã«ã«ãªããšããéãããããŸãã代ããã« () ã䜿ãããšãåºæ¥ãŸãããã ããã€ãã§ã€ãªãã§ããã®ã§äžéšã®äŸå€ãé€ãã©ã¡ãã«ãããµãã·ã§ã«ã«ãªããŸãã
åé ã®å 容ãã·ã§ã«é¢æ°ã§ã¯ãªãã°ã«ãŒãã«ããå Žåã¯ãã®ããã«ãªããŸãã
sed 's/%2C/\n/g' <<< ${QUERY_STRING} |
nkf --url-input |
sed -e '1s/keywords=//' -e 's/^[ ã]*//' -e 's/[ ã]*$//' | {
# HTML ãšã¹ã±ãŒããè¡ã
nkf -w16B0 |
xxd -plain |
tr -d '\n' |
sed 's/..../\&#x&;/g' |
sed 's/\
/\n/g'
} |
awk '{print "<a href=\"/key.cgi?key="$1 "\">" $1 "</a>" }' |
sed '1iContent-Type: text/html\n'
ãã®æžãæ¹ã«ãã£ãŠãã©ã®ç¯å²ãäœãããŠãããæç¢ºã«ãªããã³ã¡ã³ããå ¥ãããããªããŸãã
ãªãã¡ã¯ã¿ãªã³ã°åŸã®ã³ãŒãã§ã¯ä»¥äžã®ããã« awk ã®éšåã«äœ¿çšããŸããã
get_keywords <<< ${QUERY_STRING} | escape_html | {
awk '{print "<a href=\"/key.cgi?key="$1 "\">" $1 "</a>" }'
} | output "text/html"
ããã¯ããã« awk ã䜿ããã«ä»¥äžã®ããã«æžãçŽãããšãåºæ¥ãŸãã
get_keywords <<< ${QUERY_STRING} | escape_html | {
while IFS= read -r url; do
printf '<a href="/key.cgi?key=%s">%s</a>\n' "$url" "$url"
done
} | output "text/html"
ããã¯å¿
ãããããæžãçŽããã»ããè¯ããšèšã£ãŠããããã§ã¯ãªãããã®ãããªåœ¢ã«æžãçŽãããšãå¯èœã§ãããšããäºå®ãè¿°ã¹ãŠããã ãã§ããã·ã§ã«ã¹ã¯ãªããã«äžæ
£ãã§ãããšããã®ãããªæžãæ¹ãã§ãããšããããšã«æ°ã¥ãã«ãããšæããŸãããŸãäžå¿æžãçŽããã»ããããçç±ããã£ãŠãä»¶æ°ãå°ãªãå Žå awk ãåŒã³åºããªãæ¹ãéããšããã®ãšãããèšèªã®äžã«å¥ã®èšèªãæ··ããïŒä»åã®å Žåã·ã§ã«ã¹ã¯ãªããã« awk ãæ··ããŠããïŒãšãšã¹ã±ãŒãã§èªã¿ã¥ãããªãã®ã§ãªãã¹ãé¿ããã»ããè¯ããšããããšã§ãã
ãã®æžãæ¹ã®ããäžã€ã®ã¡ãªããã¯ãã«ãŒãã®å€ã«å€æ°ãæã¡åºãããšããããšã§ãã
get_keywords <<< ${QUERY_STRING} | escape_html | {
i=0
while IFS= read -r url; do
i=$((i + 1))
printf '<a href="/key.cgi?key=%s">%s</a>\n' "$url" "$url"
done
echo "$i" # ãã
} | output "text/html"
# ãã ãããã§ã¯ i ã¯åç
§ã§ããªã
äžèšã®ã³ãŒãã¯æåŸ
éãã«åããŸããå®ã¯å€æ°ãã«ãŒãã®å€ã«æã¡åºããªããšãã話ã¯ãæ£ããã¯ãµãã·ã§ã«ã®å€ã«å€æ°ãæã¡åºããªããšããããšã§ããµãã·ã§ã« = ã«ãŒãã®å Žåã¯ã«ãŒãã®å€ã«æã¡åºããªããšããããšã«ãªããŸãããäžèšã®å Žåã¯ãã€ãã§çŽæ¥ã€ãªãã§ãã {} ããµãã·ã§ã«ã®éå§ç¹ãªã®ã§ããã®äžã«ãã倿°ã¯ã«ãŒããè¶
ããŠåç
§ããããšãåºæ¥ãŸããã¡ãªã¿ã« {} ã§ã°ã«ãŒãã«ãã代ããã«é¢æ°ã«ããå Žåãåæ§ã§ãã
å°ããªã³ãã³ãã¯çµåããŠäžã€ã«ããïŒ
ãããã©ãŒãã³ã¹ãäœããã®æã§è§£èª¬ããŸããããããã«ããã¯ãšãªããªãå°ããªã³ãã³ããããã€ããã€ãã§ã€ãªããŠãäœãã¡ãªãããæããŸãããé¢ä¿ãªãå 容ãŸã§ç¡çãããŸãšããå¿ èŠã¯ãããŸããããåããå¿ èŠããªããªãã€ãªããŠããŸããŸãããã
äŸãã° tr ã³ãã³ã㯠sed ã³ãã³ãã«çœ®ãæããããå ŽåããããŸããè€æ°ã® sed ã¯äžã€ã«ãŸãšããããŸã.
sed 's/..../\&#x&;/g' | sed 's/\
/\n/g'
ããããããããããâ
sed 's/..../\&#x&;/g; s/\
/\n/g'
ãããããããããããŸãã¯
sed -e 's/..../\&#x&;/g' -e 's/\
/\n/g'
ãã㊠awk 㯠trãsedãgrep ãåããã£ãäžèœã³ãã³ãã§ããè€æ°ã®é£ç¶ããæåååŠçã³ãã³ãã¯ãåºæ¬çã«äžã€ã® awk ã³ãã³ãã«çœ®ãæããããã¯ãã§ãã
grep 'foo' | grep 'bar'
ããããããããããâ
awk '/foo/ && /bar/'
# grep + sed
awk '/foo/{ gsub(/foo/, "bar"); print }'
ä»åã®ãªãã¡ã¯ã¿ãªã³ã°ã§ã¯ããšã¹ã±ãŒãåšãã®å®è£
ããã«ã¯é¢åãªåŠçããã£ãã®ã§é¢æ°ã®äžãŸã§çœ®ãæããããšã¯ããŸããã§ãããããã®æ°ã«ãªãã° awk ã¹ã¯ãªããäžã€ã«çœ®ãæããããšãã§ããã§ãããã
ãŸã awk ã䜿ããããªããšããã®ã¯ãã ã®æããã¿ã§ããPerl ã Python ã Ruby ãªã©ã«çœ®ãæããŠãããã§ãããéåºŠãæ°ãªããªã C èšèªã Go ã Rust ã«çœ®ãæããŠãããã§ããããéžæè¢ãšãªãã³ãã³ããèšèªã¯ãããã§ããããŸããããããå Žåã§ã颿°ã«ãªãã¡ã¯ã¿ãªã³ã°ããŠããã°ããã®äžèº«ïŒå®è£
ïŒãåŸããå¥ã®ãã®ã«çœ®ãæããããšãç°¡åã«ã§ããããã«ãªããŸãã颿°ã«ããããšã§ä¿®æ£ã«åŒ·ããªã£ããšããããšã§ãã
颿°ã®å®è£
ã¯åŸããå¥ã®ãã®ã«çœ®ãæããããšãç°¡åã§ãããšããæ§è³ªã¯ãã·ã§ã«ã¹ã¯ãªããã®äºææ§ïŒç§»æ€æ§ïŒã®äœãã解決ããéµã§ããããŸããäŸãã°çŽæ¥ curl ã³ãã³ãã䜿ã代ããã«é¢æ°ã«æœè±¡åããŠããã°ãcurl ãã€ã³ã¹ããŒã«ã§ããªãç°å¢ã«å¯Ÿå¿ããããã« wget ã³ãã³ãã«çœ®ãæããããšãç°¡åã«ã§ããŸããå®è£
ã®çœ®ãæãã¯åŸããç°¡åã«ã§ããããšãªã®ã§ãæåããããããªå Žåã«å¯ŸåŠããŠããå¿
èŠã¯ãããŸããã颿°ã«ããããšã¯å°æ¥ã®ç§»æ€å¯èœæ§ãé«ããªããéçºã³ã¹ããäœæžããããã¯ããã¯ã®äžã€ã§ãã
ãã©ã¡ãŒã¿çœ®æã掻çšããïŒ
æè¿æã£ãŠããã«ã¯ã¿ã㪠sed ã awk ã䜿ãããã§ã¯ãªãã®ãïŒãšããããšã§ããè€æ°è¡ã®æååãäžæ¬ããŠå€æããã®ã§ããã°ããããã®ã³ãã³ãã«ä»»ããã»ããéããè¯ããšæããŸããã倿°ã«å
¥ã£ãŠããäžè¡ã®æååãå å·¥ããæã«ãŸã§ sed ã awk ã䜿ãå¿
èŠã¯ãããŸããããã®èšäºã®äŸã§ã¯äœ¿ããŸããã§ãããããã£ãšæµãã ãã«ããŸããããã£ãšãã©ã¡ãŒã¿å±éãæŽ»çšããŸãããã
VAR=$(echo "$VAR" | sed 's/foo/bar/g')
â
VAR=${VAR//foo/bar} # bash æ¡åŒµã§ãã
çãæååã®ç·šéã¯ãã©ã¡ãŒã¿çœ®æã®æ¹ãé©åãªå Žåãå€ããšæããŸããããã¯ããã§èšå·ã䜿ãã®ã§èŠãã«ãããšããã®ã¯ãããŸãããåããããã颿°ã«ããããšãã§ããŸãããšã¯ãããã¡ãã¡é¢æ°ãäœãã®ã¯é¢åãªã®ã§ãããã颿°ã©ã€ãã©ãªãå¿ èŠã ãããªãšã¯æã£ãŠããŸãã
ãŸãšã
- 颿°ã䜿ããšåŠçãçè§£ãããŸã§ã®æéãçããªã
- 颿°ã䜿ããšã³ãŒãã®èªã¿é£ã°ããã§ããããã«ãªã
- 颿°ã䜿ããšä»æ§ã®å€æŽã«å¯ŸåŠãããããªã
- 颿°ã䜿ããšã³ãŒããäžããäžãžèªã¿é²ããããšãã§ããããã«ãªã
- 颿°ã䜿ããšã³ãŒããæžãåå©çšãã§ãã
- 颿°ã䜿ããšäºææ§ãç§»æ€æ§ãé«ããªã
- 颿°ã䜿ããšãã¹ããããããªã
ãªãã颿°ã䜿ãããšã®éèŠæ§ãèªããŸãšãã«ãªã£ãŠããŸããŸããããããã¯å¯èªæ§ãã¡ã³ããã³ã¹æ§ãäžããããã«éèŠãªã®ã颿°ïŒæœè±¡åïŒã§ããã®å¯Ÿæ¥µã«ããã®ããã€ããå€çšããå¯èªæ§ã®äœãã·ã§ã«èžãªã®ã ããã ãšæããŸãããã¡ãã颿°ã䜿çšããã ãã§åé¡ã解決ããããã§ã¯ãããŸãããæ°ããããŒã«ãå°å ¥ããŠãããæ¹ãå€ããªãéãäœãå€ãããªãããã«ã颿°ããã 䜿ãã ãã§ã¯ã ãã§æ£ããäœ¿ãæ¹ãåŠã¶å¿ èŠããããŸãã䜿ãã ããªããšããããæ£ãã䜿ããããã«ãªãã«ã¯æéãããããããããŸãããã颿°ã䜿ããªãããšã«ãªã«ãå§ãŸããŸãããæ®æ®µãã颿°ã䜿ãã©ã®ãããªäœ¿ãæ¹ãæ£ããããééã£ãæã«äœãééãã ã£ãã®ããèããå¿ èŠããããŸãã颿°ã¯ã©ã®èšèªã§ã䜿ãããŠããäžçäžã§èªããããæè¡ãªã®ã§ãããŸãããããééã£ãæè¡ã§ããå¯èœæ§ã¯ãããŸãããæ±ºããŠèªåã®åäžè¶³ã颿°ã®ããã«ã¯ããªãããã«ã
ã·ã§ã«ã¹ã¯ãªããã¯ç¹åŸŽçãªèšèªã§ãããäœãããä»ã®èšèªãšå šãéããšããããã§ã¯ãããŸãããã·ã§ã«ã¹ã¯ãªãããããã°ã©ãã³ã°èšèªã®äžã€ã§ãããä»ã®ããã°ã©ãã³ã°èšã®è©±ã¯ã·ã§ã«ã¹ã¯ãªããã«ãåœãŠã¯ãŸããŸãããã·ã§ã«ã¹ã¯ãªããã¯ïŒä»ã®èšèªãšéã£ãŠïŒããããé¢šã«æžããã®ã ããšãã誰ããèšã£ãïŒïŒïŒäž»åŒµãçã«åããªãã§ãã ããããããèšã£ã人ã¯ã©ããã·ã§ã«ã¹ã¯ãªããã«è©³ãã人ã§ã¯ãªãã§ããããã·ã§ã«ã¹ã¯ãªããã®å¯èªæ§ãæªããªãåå ã®äžã€ã¯ã³ãã³ãããã€ãã§é·ãã€ãªããããããã€ãå°çãã§ããããã¯é©åã«æœè±¡åïŒé¢æ°ãäœãããšïŒãããããšã§å¯èªæ§ãé«ããããšãã§ãããã¹ãå¯èœæ§ãã¡ã³ããã³ã¹æ§ãç§»æ€æ§ãªã©ã®åé¡ã解決ããã®ã容æã«ãªããŸãã
念ã®çºã§ããã·ã§ã«èžãããããšèªäœã¯åŠå®ããŠããŸãããããããã®ãçæéã§ããã£ãšæžããã®ã§ããã°ãããã¯åãããšã ãšæããŸããã·ã§ã«ã¹ã¯ãªãããæžãäžã§ãè¯ãèšç·Žã«ãªããšæããŸããåŠå®ããŠããã®ã¯ã·ã§ã«èžã§æžãããããªã³ãŒããã·ã§ã«ã¹ã¯ãªãããšããŠäœ¿ãããšã§ãã
ããŸã ã·ã§ã«ã¹ã¯ãªããã§"倧ããª"ãœãããŠã§ã¢ãéçºãããšããããš
ç§ã¯ã·ã§ã«ã¹ã¯ãªããã奜ãã§ãããã·ã§ã«ã¹ã¯ãªããã§æžãããäžéå端ãªã³ãŒããèŠããã³ã«ãã ãããã·ã§ã«ã¹ã¯ãªããã§æžããªãšèšãããŠããŸããã ãããšæã£ãŠããŸããŸãããããããã§ããåé¡ãªãåäœãããšå®å¿ã§ããã³ãŒããã·ã§ã«ã¹ã¯ãªããã§æžããªããããªãçŽ çŽã«ä»ã®ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãã ãããã·ã§ã«ã¹ã¯ãªããã§ã®äžãå€§èŠæš¡ãœãããŠã§ã¢ã®éçºã¯ããããããçŽ äººã«ã¯ãèŠãåºæ¥ãªãããšãããã€ã§ãããŸãæ¬åœã®çŽ äººã§ããã°èšèªã«é¢ä¿ãªããœãããŠã§ã¢éçºèªäœã«åå ããŠã¯ãããŸããããïŒå°æ¥çã«ããœãããŠã§ã¢éçºããããªãšããæå³ã§ã¯ãªãããŸãã¯ããã°ã©ãã³ã°ã®åºç€ãå匷ããŠããåå ããŠããšããæå³ã§ããïŒ
ã·ã§ã«ã¹ã¯ãªããã§ä¿¡é Œæ§ãšã¡ã³ããã³ã¹æ§ãé«ã倧ããªãœãããŠã§ã¢ãäœãã®ã¯ãšãŠã倧å€ã§ãããªããªãååã«ãã¹ããããŠå®çžŸã®ãã䟿å©ãªã©ã€ãã©ãªãã³ãã³ããå°ãªãã®ã§ãããããèªåã§äœã£ãŠã¡ã³ããã³ã¹ãç¶ããªããšãããªãããã§ããèªåã§ä¿¡é Œæ§ã®é«ãã©ã€ãã©ãªãã³ãã³ããäœãã®ã¯ãšãŠãæéããããé£ãããŠå€§å€ãªäœæ¥ã§ãïŒå®éã«ããããã©ã€ãã©ãªãã³ãã³ããéçºããŠããæåãªãããžã§ã¯ããèŠãŠã¿ãŠãã ãããéçºã®å€§å€ããããããšæããŸãïŒãäœã£ãŠã¿ãŠåããŠããã£ãœããã OK ã§ã¯åºæ¥ãããšã«ã¯ãªããŸãããã³ãŒããä¿®æ£ãããã³å®éã«æ§ã ãªç°å¢ã§ãã¹ãããªããã°ãããŸãããå匷ã®ããã«äœããšããã®ãªãæ§ããŸããããæ¥åã§äœ¿ããã®ã§ããã°èªåã§äœãããšããã«ãã§ã«äžã®äžã§äœ¿ãããŠããå®çžŸããããã®ã䜿ã£ãŠãã ããããããããšã·ã§ã«ã¹ã¯ãªããã®äžçã«ã¯ãã®ãããªãã®ãå°ãªãèªç¶ãšå€§ããªãœãããŠã§ã¢ã¯ã·ã§ã«ã¹ã¯ãªããã§éçºãã¹ãã§ã¯ãªããšããçµè«ã«ãªãã§ããããã·ã§ã«ã¹ã¯ãªãããç°¡åã§çç£æ§ãé«ããšæãã®ã¯æåã ãã§ããããããããšãå€ããªããã³ãã·ã§ã«ã¹ã¯ãªããã®æ©èœäžè¶³ãéçã«æ©ãŸãããŸããã ããå€ãã®äººã¯ã·ã§ã«ã¹ã¯ãªãããå°ã倧ãããªã£ãçšåºŠã§ä»ã®èšèªã䜿ãããšèšãåºãã®ã§ãã
ç§ã¯ãããªç¶æ³ãæ¹åããŠã·ã§ã«ã¹ã¯ãªããã§å€§èŠæš¡ãšãŸã§ã¯ãããªããšããããªãã®èŠæš¡ã®ãœãããŠã§ã¢ãäœããããã«ããããšæã£ãŠããŸãããã®ããã«ã¯æ§ã ãªåé¡ã解決ããªããã°ãããŸãããçŸç¶ã·ã§ã«ã¹ã¯ãªããã®äžçã¯åé¡ã ããã§ã倧ããªãœãããŠã§ã¢ãæ°è»œã«äœããç¶æ ã§ã¯ãããŸããããããã䜿ãããããããªãå°ããªããŒã«ãããã€ãæããããã§ããã®åé¡ãæ¬åœã«è§£æ±ºããŠãã人ã¯èª°ãããŸãããã ããä»ã¯ãŸã ã·ã§ã«ã¹ã¯ãªããã§äžãå€§èŠæš¡ã®ãœãããŠã§ã¢ãéçºããã®ã¯ãå§ãããŸããã
ããã«ããããã§ããïŒäŸãã·ã§ã«ã¹ã¯ãªããã§å€§ããªãœãããŠã§ã¢ãéçºã§ãããšããŠããã·ã§ã«ã¹ã¯ãªããã§éçºãã¹ãçç±ãå¿ èŠæ§ãªãããªãã§ãããïŒShellSpec ã®éçºã§ããããããŸããããã·ã§ã«ã¹ã¯ãªããã§å€§ããªãœãããŠã§ã¢ãéçºããã®ã¯ãšãŠã倧å€ã§éçºã³ã¹ããããããŸããé Œãã«ã§ããïŒïŒïŒPOSIX ã¯é«ãäºææ§ãšçç£æ§ãäž¡ç«ãããããã«å šããšèšã£ãŠããã»ã©åœ¹ã«ç«ã¡ãŸããã§ãããã·ã§ã«ã¹ã¯ãªããã«ãã倧ããªãœãããŠã§ã¢ã®éçºã¯ã·ã§ã«ã¹ã¯ãªããã§éçºããçç±ããããïŒããšèšãã人ã ããããã°è¯ãããšã§ãã