ãã®èšäºã¯ãDavid Copelandã®Rubyã§ã®ãã°ãããã³ãã³ãã©ã€ã³ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ïŒ
賌å
¥ ã
ããŠã³ããŒãã 詳现 ïŒã®åœ±é¿ãåããŠæžãããŸããã ãã®ã»ãšãã©ã¯ã䜿çšããèšèªã«é¢ä¿ãªããCLIã¢ããªã±ãŒã·ã§ã³ã®èšèšã®èšèšã«å°å¿µããŸãã ãã®ããã»ã¹ã§ã¯ãã«ããŒã«åºæã®äºé
ã«ã€ããŠèª¬æããŸããããããç¥ããªããŠãæãã¯ãããŸãããã³ãŒããå€ãããããšã¯ãããŸããã ãã®èšäºã¯ãèªèº«ã®çµéšãæ£ãã°ããããåè¿°ã®æ¬ã®ããªã詳现ãªã¬ãã¥ãŒãšèããããšãã§ããŸãã ç§ã¯æ¬ãââãå§ãããŸãïŒ
ãŸãã質åãããŸãã IT-shnikovã®ã³ãã¥ããã£ãèŠããšãçŸããã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãåããããã°ã©ã ãè±å¯ã«ããã«ãããããããã³ãã³ãã©ã€ã³ã¢ããªã±ãŒã·ã§ã³ãéåžžã«äººæ°ãããããšãããããŸãã ãªãã§ïŒ
ããã€ãã®çãããããŸãã ãŸãã
éåžžã«äŸ¿å©ã§ããã³ãã³ãã©ã€ã³ã§ã³ãã³ãã䜿çšããŠã¿ã¹ã¯ãèšè¿°ã§ããã°ãããŠã¹ã®åããåæããŠããŸããŸãªã¡ãã¥ãŒé
ç®ãã¯ãªãã¯ããå¿
èŠãããå Žåãããèªååãã¯ããã«ç°¡åã«ãªããŸãã 第äºã«ãä¿¡ããããªãã»ã©å€ãã®æ¹æ³ã§ããã°ã©ã ãçµã¿åãããããšãå¯èœã«ãªããŸããããã¯ãã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠéæããããšã¯å°é£ã§ãã
Unixã®å²åŠã¯ãå€ãã®å Žåãããããç¬èªã®ç¹å®ã®ã¿ã¹ã¯ãå®è¡ã§ããå€ãã®å°ããªãŠãŒãã£ãªãã£ãã1ã€ã®å€æ©èœãŠãããŒãµã«ããã°ã©ã ãããåªããŠãããšããååã«åºã¥ããŠããŸãã ãããŠãããã¯ãIT-shnikovã®äžçã§Unixã·ã¹ãã ãæåããçç±ã®1ã€ã§ãã
ããããã誰ããGUIããCLIã«æ®éã®ãŠãŒã¶ãŒãåŒãä»ããããšãã§ãããšã¯èãã«ããããšãçè§£ããŠããããã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ãã£ã¹ãããšããç§ãã¡ã«çŠç¹ãåãããŠãCLIã¢ããªã±ãŒã·ã§ã³ã«å¯Ÿããåžæãæç¢ºã«ããŸãããã
äžè¬çãªèŠä»¶
ç°¡åã«èšãã°ãããããåçŽã«ããããå¹ççã«äœ¿çšãããã®ã§ãã David Copelandã¯ããããéæããããã®ã¢ããªã±ãŒã·ã§ã³èŠä»¶ã®å
æ¬çãªãªã¹ããäœæããŸããã
- 䜿ãããã-䜿ãããããæç¢ºãªç®çãæã€å¿
èŠããããŸãã ã§ããã°1ã€ã ãã¥ãŒã©ã¯ã誰ããã¹ã€ã¹ã®ãã€ãã®äœ¿ãæ¹ãç¥ã£ãŠããŸãããéåžžã¯äœ¿ãã¥ããããã®èœåããã¹ãŠç¥ã£ãŠãã人ã¯ããŸããã ãã ãã倿©èœã¢ããªã±ãŒã·ã§ã³ãèšèšããŠã䜿ããããããµããŒãããããããæ¹æ³ã«ã€ããŠã説æããŸãã
ããã°ã©ã ã§ã®äœæ¥ãç°¡çŽ åããããã«ã§ããæå°éã®ããšã¯ããªãã·ã§ã³ã®åœ¢åŒã«é¢ããèŠåã«åŸãããšã§ãã ãŠãŒã¶ãŒã«ååŠç¿ã匷å¶ããªãã§ãã ããïŒ ãªãã·ã§ã³ãæå®ããã®ãæ
£äŸã§ããããããã«ååãä»ããæ¹æ³ã«ã€ããŠè©³ãã説æããŸãã - 圹ç«ã€-ããã¯ããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã®å®è¡æ¹æ³ãèµ·åæ¹æ³ãæ§ææ¹æ³ã«é¢ãããã«ãã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããããšãæå³ããŸãã ã¢ããªã±ãŒã·ã§ã³ããã®ããŒãžãmanã«è¿œå ããããšããå§ãããŸãã ããã«ãããŒã å®äºã¬ãã«ã§ã®ã·ã§ã«ãšã®çµ±åã¯åé¡ãããŸããã
- ä»ã®ãŠãŒã¶ãŒãšããŸãããåããã-ã¢ããªã±ãŒã·ã§ã³ã¯ä»ã®ã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ã§ããå¿
èŠããããŸãã ããã¯ãUnixã§äžè¬çãªã¢ããªã±ãŒã·ã§ã³ã®ã¢ãžã¥ãŒã«æ§ãæå³ããŸãã ãªã¿ãŒã³ã³ãŒããå
¥åºåã¹ããªãŒã ã§ã®ææ
®æ·±ãäœæ¥ãªã©ãç¡èŠããªãã§ãã ããã
- è³¢æãªããã©ã«ãããããŸãããæ§æå¯èœã§ã-æšæºã®äœ¿çšã·ããªãªã¯ãåã®ãªãã·ã§ã³ãæå®ããã«å©çšå¯èœã§ãã ã«ã¹ã¿ã ã·ããªãªã¯äœ¿ããããå¿
èŠã¯ãããŸããããæé ãªäŸ¡æ Œã§ããå¿
èŠããããŸãã ããã«ãããã©ã«ãã®ãªãã·ã§ã³ã»ããã¯ã«ã¹ã¿ãã€ãºå¯èœã«ããå¿
èŠããããŸãã
- ç°¡åã«ã€ã³ã¹ããŒã«-ãã¹ãŠã®äŸåé¢ä¿ãšãšãã«ç°¡åã«ã€ã³ã¹ããŒã«ã§ããèµ·åã容æã«ããããã«ã¢ããªã±ãŒã·ã§ã³å€æ°ãç°å¢å€æ°ã«èšå®ããŸãã æŽæ°ãåæ§ã«ç°¡åã«è¡ãããŸãã
- æ£åžžã«å€±æãã-ã¢ããªã±ãŒã·ã§ã³ã®åŒã³åºãã§ãšã©ãŒãçºçããå Žåããšã©ãŒã®å
容ãšä¿®æ£æ¹æ³ãå ±åããå¿
èŠããããŸãã ããã«ãã¢ããªã±ãŒã·ã§ã³ã¯éç Žå£çã§ãªããã°ãªããŸããã åŒæ°ã§ãšã©ãŒãçºçããå ŽåïŒããã³ãçæ³çã«ã¯ã確èªãªãã§å±éºãªæäœããŸã£ããå®è¡ããªãå ŽåïŒããã¡ã€ã«ãäžæžããŸãã¯æ¶å»ããªãã§ãã ããã
- æ°æ©èœãšãã°ä¿®æ£ãç°¡åã«ååŸ-ã¢ããªã±ãŒã·ã§ã³ããµããŒãããå¿
èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ãã¢ãžã¥ãŒã«ã«åå²ããããããç°ãªããã¡ã€ã«ã«åæ£ããŸãã ãã¹ããæžããŸãã ã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ã䜿çšããŸãã ããŒãžã§ã³ç®¡çã·ã¹ãã ã䜿çšããŸãã
- ãŠãŒã¶ãŒãåã°ãã-ã¢ããªã±ãŒã·ã§ã³ã®åºåã¯ç®ã«åªããã¯ãã§ãã ããªãã®èªç±ãªè²ã§ãæžåŒèšå®ïŒããšãã°ã衚圢åŒãŸãã¯htmlïŒã ã€ã³ã¿ã©ã¯ãã£ããªãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãå«ãŸããŸãã
次ã«ããããã®ãã€ã³ãã«ã€ããŠããã«è©³ãã説æããŸãã
䜿ãããã
ãŠãŒãã£ãªãã£ãšãœãããŠã§ã¢ããã±ãŒãžã ã©ã¡ãã䟿å©ã§ããïŒ
ãã®ããããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒãã£ãªãã£ãšãœãããŠã§ã¢ããã±ãŒãžïŒå
ã®ã³ãã³ãã¹ã€ãŒãïŒã®2ã€ã®ã¿ã€ãã«æ¡ä»¶ä»ãã§åå²ã§ããŸãã
æåã®ã¿ã€ãã¯ã1ã€ã®ç®æšãš1ã€ã®æäœã¢ãŒããæã€ã¢ããªã±ãŒã·ã§ã³ã§ãã ãã®ã¿ã€ãã®ããã°ã©ã ã«ã¯æ°ãåããªãã»ã©ã®äŸããããã»ãšãã©ãã¹ãŠã®Unixã³ãã³ãã¯æ¬¡ã®ãšããã§ãïŒlsãgrepãdiffã... ããã«ãé£ç¶åŠçã®ããã«ãã§ãŒã³ã«æ¥çããã®ãç°¡åã§ãã ããã§ã¯ã次ã®äŸããé¢ä¿ããŸãã ããªããå®¶ã建ãŠãŠãããšæ³åããŠãã ãããããã«ããã®å®¶ã¯æšæºã¢ãã«ã§ã¯ãããŸããã ã¢ããªã·ãã¯ãããã¯ããã§ã¯ãªããã¬ã³ã¬ããæ§ç¯ããæ¹ãã¯ããã«äŸ¿å©ã§ããå Žæã«ãã£ãŠã¯ãããã®ãããã¯ããã¡ã€ã«ããå¿
èŠããããã©ããã§ç³ã§ãžã§ã€ã³ããéããå¿
èŠãããããã§ãã ã¯ãããããã¯ã¯ã¯ã¬ãŒã³ã§ããåŒã£åŒµãããšãã§ããŸããããã¬ã³ã¬ã¯æã§çœ®ãããšãã§ããŸãã
2çªç®ã®ã¿ã€ãã®ããã°ã©ã ã¯ãã¹ã€ã¹ã®ãã€ããŸãã¯ããŒãããã»ããµãŒãšæ¯èŒã§ããŸãã æã«ã¯éåžžã«äŸ¿å©ã§ãã gitãèŠãŠãã ããïŒrubyãgemãrailsãbundleã®äžçã§ã¯ããã«èšæ¶ãããŸãïŒ-1ã€ã®ããã°ã©ã ã§ããããããããã€å®è¡ã§ããŸããã ãããŠã圌女ã¯ã³ããã/ãã§ãã¯ã¢ãŠãã§ããèªåã§å±¥æŽãæ€çŽ¢ãããã¡ã€ã«éã®å€æŽãæ€èšããŸãã ãã®ãããgrepãdiffãªã©ãçµã¿èŸŒãŸããŠããŸããGitã«äœãçµã¿åãããå¿
èŠã¯ãããŸããã圌ã¯ãã¹ãŠãè¡ãæ¹æ³ãç¥ã£ãŠããŸãã å®¶ãšã®é¡æšã«æ»ããšãgitaã«ã¯ããããå Žé¢ã§æšæºçãªãããžã§ã¯ãããããŸãïŒãããŠãããããã¹ãŠãæãåºãããšããŸãïŒã
ããã§ãããã¹ãŠã®ããã°ã©ã ã倿©èœã§ããå¿
èŠã¯ãããŸããããã¹ãŠåãããã«ããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ãå®è¡ããããã§ã¯ãããŸããã ãã®è«æããµããŒãããããã«ãcdãlsãpwdãdiffãdfãããã³äŸ¿å©ãªæäœã1ã€ã®ã³ãã³ãã§å®è¡ã§ããããã«ãããŒã«ããæ³åããããšããå§ãããŸãããªãã·ã§ã³ãå°ã倿Žããã ãã§ãïŒããšãã°ããã¡ã€ã«ã·ã¹ãã ã®å€æŽããã¡ã€ã«ã·ã¹ãã ã®è¡šç€ºã ïŒ äœ¿ããŸããïŒ ç§ã¯ããªããé床ã®ããã°ãã®ããã«æšãŠããšæããŸãã ãœãããŠã§ã¢ããã±ãŒãžã¯éåžžã«äŸ¿å©ã§ããã8ã€ã®è§Šæã§ã±ã³ã¿ãŠãã¹ãæžãåã«æ
éã«èããããšã¯çã«ããªã£ãŠããŸãã
ãšããã§ã倿°ã®ãŠãŒãã£ãªãã£ãäœæããããããœãããŠã§ã¢ããã±ãŒãžã«ãããå Žåã¯ãä¿®æ£ããã®ã¯ããã»ã©é£ãããããŸããã ã³ãã³ããã«ãŒãã£ã³ã°ããã©ãããŒãäœæããã ãã§ãã ç¥ããªããããããŸããããgitã¯ã³ãã³ãã®çš®é¡ã«åºã¥ããŠgitã³ãã³ããå¶åŸ¡ã転éããgit-commitãgit-showãgit-hash-objectãgit-cat-fileãgit-update-indexãªã©ã®å€æ°ã®ãŠãŒãã£ãªãã£ã§æ§æãããŠããŸããªãã·ã§ã³ïŒãã¡ããããŠãŒãã£ãªãã£åŒã³åºãã®åäžãã§ãŒã³ã1ã€ã®ã³ãã³ãã®èåŸã«ããå ŽåããããŸãïŒã ãã®ãããå°æ¥çµåããå°ããªããã°ã©ã ã®ã»ããã§å€§èŠæš¡ãªãããžã§ã¯ããéå§ããããšããå§ãããŸãã äœæããããã°ãä¿å®ã䜿çšãç°¡åã§ãã
ã³ãã³ãã©ã€ã³åŒæ°ã®æ§æãŸãã¯ããã®å®¶ã«ã¯ç¬èªã®äŒçµ±ããããŸããã
çšèªããå§ããŸãã ã³ãã³ãã©ã€ã³ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãã«ãããã€ãã®ãã©ã¡ãŒã¿ãŒã»ãããæå®ããŸãã ãããã¯æ¬¡ã®ã¿ã€ãã«åããããŸãïŒãªãã·ã§ã³ãšåŒæ°ã David Copelandã¯ããªãã·ã§ã³ãããã«2ã€ã®ãµãã¿ã€ãïŒãã©ã°ãšã¹ã€ããïŒã«åå²ããŸãã
æŠç¥çã«ã¯ã次ã®
executable [options] <arguments>
ãšããŠããã衚ãããšãã§ã
executable [options] <arguments>
ã ãã¹ãŠãææ°ã§ãããšæããŸããã念ã®ãããè§æ¬åŒ§å
ã®ãã©ã¡ãŒã¿ã¯ãªãã·ã§ã³ã§ãããå±±æ¬åŒ§å
ã®ãã©ã¡ãŒã¿ã¯å¿
é ã§ããããšã説æããŸãã
åŒæ°ïŒãŸãã¯äœçœ®åŒæ°ïŒã¯ãããã°ã©ã ãæ©èœããããã«æå®ããå¿
èŠããããã©ã¡ãŒã¿ãŒã§ãã ãããã®é åºã¯å³å¯ã«å®çŸ©ãããŠããŸãã
ãªãã·ã§ã³ã¯ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒã§ãã ãããã¯ä»»æã®é åºã§æå®ã§ããŸãã
ã¹ã€ããã¿ã€ããªãã·ã§ã³ã¯ããŒã«ãªãã·ã§ã³ã§ãããããã°ã©ã ã¯ãã®æç¡ããã§ãã¯ããŸãã äŸïŒ--
--ignore-case
ïŒãŸãã¯ã
--ignore-case
--no-ignore-case
ïŒã
ãã©ã°ã¿ã€ããªãã·ã§ã³ã¯ããã©ã¡ãŒã¿ä»ãã®ãªãã·ã§ã³ã§ãã ãã®ãã©ã¡ãŒã¿ãŒã«ã¯ããã©ã«ãå€ããããŸãã ããšãã°ãç§ã®ããŒãžã§ã³ã§ã¯
grep -C ...
ãš
grep -C 2 ...
å ŽåãgrepãŠãŒãã£ãªãã£ã¯åçã§ãã
åŒæ°ãšãªãã·ã§ã³ã®äž¡æ¹ã«ããã©ã«ãå€ãããå ŽåããããŸãããããã§ãªãå ŽåããããŸãã
äŸãšããŠã
grep --ignore-case -r - 4 "some string" /tmp
åŒæ°ã¯
"some string" /tmp
ã§ããããªãã·ã§ã³ã¯
--ignore-case -r - 4
ã§ãã åæã«ã
--ignore-case
ãš
-r
ã¯ã¹ã€ããã§ããã
-C 4
ã¯ãã©ã°ã§ãã
ãªãã·ã§ã³ã®èŠå
ãªãã·ã§ã³ã¯ãçã
-i
圢åŒãšé·ã
--ignore-case
圢åŒã®äž¡æ¹ã§æå®ã§ããŸãã ååãšããŠãã¹ã¯ãªããã®ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ãçŽæ¥ãã£ããã£ã§ããããããªãã·ã§ã³åœ¢åŒã奜ããªããã«æ¥œããããšã劚ãããã®ã¯äœããããŸããã ããããUnixã³ãã¥ããã£ã«ãã£ãŠéçºãããã«ãŒã«ãé å®ããããšããå§ãããŸããã«ãŒã«ã¯æãçµãŠç ãæŸãŸãããã»ãšãã©ã®äººãããã«æ
£ããŠããŸãã ããã«ããããã®ãªãã·ã§ã³ãç°¡åã«æäœã§ããæ¢è£œã®ã©ã€ãã©ãªããããŸãã
ãããã®ã«ãŒã«ã¯æ¬¡ã®ãšããã§ãã
- é·ããªãã·ã§ã³ïŒ
--long-option
ïŒã¯2ã€ã®ãã€ãã³ã§å§ãŸã--long-option
ã ãªãã·ã§ã³åã«ã¹ããŒã¹ãå«ããããšã¯ã§ããŸããããåäžã®ãã€ãã³ã䜿çšã§ããŸãã - çããªãã·ã§ã³ïŒ
-l
ïŒã¯ã1ã€ã®æåïŒéåžžã倧æåãšå°æåãåºå¥ãããŸãïŒãšå
è¡ãããã€ãã³-l
æ§æãããŸãã çããªãã·ã§ã³ãé·ãã¢ããã°ã®æåã®æåã§ããå Žåããã®æå³ãèŠãããããªããŸãã - 次ã®ããã«ãããã€ãã®çããªãã·ã§ã³ãçµã¿åãããããšãã§ããŸã
ls -a -l
ls -al
ls -a -l
åçã§ãã åäžã®ãã€ãã³ã®åŸãåŒæ°ãªãã§å¿
èŠãªæ°ã®ãªãã·ã§ã³ - çããªãã·ã§ã³ã«ãã©ã¡ãŒã¿ãŒãããå Žåãéåžžã¯ãªãã·ã§ã³ã®çŽåŸã«çœ®ãããã¹ããŒã¹ã§åºåãããšãã§ããŸãã
-C4
ãŸãã¯-C 4
ãéåžžããšèšã£ãã®ã¯å¶ç¶ã§ã¯ãããŸããã§ããã ãã®ãããããšãã°ãæšæºã®optparse rubyââã©ã€ãã©ãªã¯ããã2ã€ã®ã±ãŒã¹ãåãæ¹æ³ã§åŠçããŸãã lsãŠãŒãã£ãªãã£ã¯ãåæ§ã®ãªãã·ã§ã³ãåãæ¹æ³ã§åŠçããŸãã ããããããšãã°ãgrepãŠãŒãã£ãªãã£ã¯ã -C
åé¢ããã 4
ãåé¢ãããŠãããšèŠãªããŸãã ãã¶ãããã¯ãã°ã§ãã äŸå€ãããããšã¯èšããŸã§ããããŸããããããã°ã©ã ãå¥ã®äŸå€ã«ãªã£ãå ŽåããŠãŒã¶ãŒã¯ããªãã«æè¬ããããšã¯ãªãã§ãããã
-cxyz
ã¯- xyz
ãš-c -x -y -z
äž¡æ¹ãšããŠè§£éã§ãããããçããªãã·ã§ã³ã«ããã©ã«ãå€ïŒ -c [param]
ïŒã®éæ°å€ãã©ã¡ãŒã¿ãŒãããå Žåãéåžžã©ã®ããã«åäœããã®ãããããŸããã ãªãã·ã§ã³ã«ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒãããå ŽåããŠãŒã¶ãŒã¯åžžã«ã¹ããŒã¹ãæžãèŸŒãæ¹ãé©åã§ãã ããã°ã©ããŒã¯ããªãã·ã§ã³ãäžç·ã«èšè¿°ããããšã«é¢é£ããåé¡ãæå°éã«æããæ¹æ³ã«ã€ããŠäºåã«èããæ¹ãããã§ãããã - é·ããªãã·ã§ã³ã®å Žåããã©ã¡ãŒã¿ãŒã®åã®ã¹ããŒã¹ã¯éåžžèš±å¯ãããŸãããçå·ã䜿çšããããšããå§ãããŸãã
ls --width=10
ãŸãã¯ls --width 10
åºåãæåããªãå Žåãé·ããªãã·ã§ã³ã®åŸããã©ã¡ãŒã¿ãŒã¯ç€ºãããŸããïŒç¹ã«ãã©ã¡ãŒã¿ãŒãæ°å€ã§ãªãå Žåãã©ã®ãããªæ··ä¹±ãçããããèªåã§å€æããŠãã ããïŒã - åãªãã·ã§ã³ã¯ãçããŠãé·ããŠãããŸããŸããã ãŸãã¯ãçããŸãã¯é·ãã ããããå¯èœæ§ããããŸãã ãã ããåãªãã·ã§ã³ã®é·ã圢åŒã®ååšã¯éåžžã«æãŸããã§ãã
- ããŒã«ãªãã·ã§ã³ã®å Žåããªãã·ã§ã³ã®
no-
ãã¬ãã£ãã¯ã¹ãæå®ã§ããŸããããšãã°ã --[no-]pager
ã --pagerãªãã·ã§ã³ã¯ããŒãžããŒã·ã§ã³ãèšå®ããŸãã--no --no-pager
ã¯ããŒãžããŒã·ã§ã³ããªãããšã瀺ãããªãã·ã§ã³ããªãå Žåã¯ããã©ã«ãå€ãä¿æãããŸãã ããã¯ããªãã·ã§ã³ãããã©ã«ãã§æ§æå¯èœãªå Žåã«ç¹ã«éèŠã§ãã ããšãã°ããã¬ãã£ãã¯ã¹ããªããã°ããªãã·ã§ã³ã®ããã©ã«ãå€ãäžæžãããããšã¯ã§ããŸããã
é·ãéžæè¢ãããããšãåžžã«æšå¥šãããçç±
éåžžããªãã·ã§ã³ã®é·ã圢åŒã¯ãã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠã¹ã¯ãªãããèšè¿°ããéã«äœ¿çšãããŸãã é·ããªãã·ã§ã³ã¯èªå·±ææžåããå¿
èŠããããŸãã sysadminãcronã調ã¹ãŠãçè§£ã§ããªããªãã·ã§ã³
-zsf -m 100
ããããŒã¿ããŒã¹ããã¯ã¢ããã¿ã¹ã¯ã®èµ·åã確èªãããšããŸãã 圌ãã¹ã¯ãªããã®äœæè
ã§ãªãå Žåã¯ãäœãæå³ããã®ããçè§£ããããã«ã圌ã¯å©ãã«æœã蟌ãå¿
èŠããããŸãã åæããŠããªãã·ã§ã³ã®ã»ãã
--scheme --max-size 100 --gzip --force
ã¯åœŒã«ãã£ãšå€ããäŒããæéãç¡é§ã«ããªãããã«ããŸãã
ããã«ããã£ãã«äœ¿çšãããªããªãã·ã§ã³ã®çããªãã·ã§ã³ãäœæããããšã¯æšå¥šãããŸããã ãŸããã¢ã«ãã¡ãããã®ãã¹ãŠã®è¡ã®ãªãã·ã§ã³ã«ããããè²»ããã»ã©å€ãã®æåããããŸããã 第äºã«ãããã«éèŠãªããšã¯ãçããªãã·ã§ã³ããªãããšã§ããã®ãªãã·ã§ã³ã¯éåžžã®æäœã§ã¯äºæ¬¡çãŸãã¯æãŸãããªãããšã§ãããåçŽã«ã§ãããããšãã£ãŠè»œçã«äœ¿çšããªãã§ãã ããã
ãã®ãããé »ç¹ã«äœ¿çšããããªãã·ã§ã³ã¯çããã®ãšé·ããã®ã®äž¡æ¹ã§ããããã£ãã«äœ¿çšãããªããªãã·ã§ã³ã¯é·ãã ãã§ãã
åæ©èœã¢ããªã±ãŒã·ã§ã³ãšå€æ©èœã¢ããªã±ãŒã·ã§ã³ã®ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã®éã
ãããã®2ã€ã®ã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãåŒã³åºããããšãã«åŒæ°ã®é åºããããã«ç°ãªããŸãã
æåã®ã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ã®å ŽåãåŒã³åºãã¯é垞次ã®ããã«ãªããŸãã
executable [options] <arguments>
ãœãããŠã§ã¢ããã±ãŒãžã®å Žåã圢åŒã¯ããè€éã§ãã
executable [global options] <command> [command options] <arguments>
ãã®æ¬ã®äŸã次ã«ç€ºããŸã
git --no-pager push -v origin_master
--no-pager
ã¯ãä»»æã®gitã³ãã³ãã«é©çšã§ãããªãã·ã§ã³ã§ãã
--no-pager
git --no-pager push -v origin_master
ã¯ãpushã³ãã³ãã«åºæã®ãªãã·ã§ã³ã§ãã ã°ããŒãã«ãªãã·ã§ã³ãšã³ãã³ãåºæã®ãªãã·ã§ã³ã¯åãååãæã€ããšãã§ããããšã«æ³šæããŠãã ããã ãã ãããã®å Žåããã¹ãŠã®ããŒã«ããããã®åŠçã«é©ããŠããããã§ã¯ãããŸãããããšãã°ãæšæºã®OptionParser rubyââã©ã€ãã©ãªã¯ããªãã·ã§ã³ãæºããããå Žæãåºå¥ããªãããããã®ã¿ã¹ã¯ã«å¯ŸåŠããŸããã ãœãããŠã§ã¢ããã±ãŒãžãäœæããå Žåã¯ãGLIã©ã€ãã©ãªãããé©åã«äœ¿çšããŠãã ããã
念ã®ãããå
¥åããã°ã©ã ã¯æè¡çã«ã¯ãã©ã¡ãŒã¿ãŒã®æååã§ã¯ãªããæ¢ã«èŠçŽ ã«åå²ããããã©ã¡ãŒã¿ãŒã®é
åãåãåã£ãŠããããšãèªè
ã«æãåºãããŸãã ã«ããŒã§ã¯ããã®é
åã¯
ARGV
ãšåŒã°ããŸãã ç§ãã¡ãçŽæ¥ãŸãã¯ç¹å¥ãªå³æžé€šã®å©ããåããŠåãã®ã¯åœŒãšäžç·ã§ãã ã¹ããŒã¹ã§èŠçŽ ã«åå²ãããŠããªãããšã«æ³šæããŠãã ããïŒããã§ãªãå Žåãããšãã°ãã¹ããŒã¹ãå«ããã¡ã€ã«åã«ããããšã¯ã§ããŸããïŒãã·ã§ã«ã®ã«ãŒã«ã¯ããè€éã§ãã ãŸããæåã®ãšã¹ã±ãŒããšã°ã«ãŒãåã®ããã®åŒçšç¬Šã®äœ¿çšãå«ãŸããŸãã ãã©ã¡ãŒã¿æååãã¹ã¯ãªãŒãã³ã°ãæ¥çããŸãã¯é
åã«ã«ããããå¿
èŠãããå ŽåããŸãã¯ãã®éã®å Žå-æšæºã·ã§ã«ã¯ãŒãã©ã€ãã©ãªãã芧ãã ããã ãããã®ç®çã®ããã«ã
String#shellescape
ã
String#shellescape
ã
Array#shelljoin
ã®3ã€ã®ã¡ãœããã®ã¿ã§æ§æãããŠããŸãã
rubyã³ãã¥ããã£ã§ã¯ãã»ãšãã©ã®ã³ãã³ãã©ã€ã³ã¢ããªã±ãŒã·ã§ã³ã¯OptionParserãŸãã¯ããã«åºã¥ãã©ã€ãã©ãªã䜿çšããŸãã æ§æã«é¢ããã»ã¯ã·ã§ã³ã§-ããå°ãåŠç¿ããããOptionParserã䜿çšããŠäœæããã³ãŒãã®äŸã瀺ããŸãã
圹ã«ç«ã€
䜿çšããawesome_programããã°ã©ã ãåããŠèŠããšããæ³åããŠãã ããã çµéšè±å¯ãªãŠãŒã¶ãŒãšããŠã¯ãæãã
awesome_program --help
ããŠãåŒæ°ã®é åºãäžé£ã®ãªãã·ã§ã³ãããã³äœ¿çšäŸã確èªããããšãæåŸ
ããŸãã ããã°ã©ã ããªãªãŒã¹ãããšããæåã«èŠããŠãŒã¶ãŒãããããæåã«åãããšãããããšãèŠããŠãããŠãã ããããããã£ãŠã
-h
ã--
--help
ãªãã·ã§ã³ãçšæããŠãããŠãã ããã ã¿ã€ãOptionParserã®ã©ã€ãã©ãªã䜿çšããå Žåãããã°ã©ã ãæå®ãã説æãšãšãã«èªèãããã¹ãŠã®ãªãã·ã§ã³ã®ãªã¹ãããããã³ããè¡ã«èªåçã«è¿œå ãããŸãã
ãã«ãè¡ã«å ããŠãæ¡åŒµãã«ããäººã§æžãããšã¯çã«ããªã£ãŠããŸãã ãã ããç§ã®ç¥ãéããrubygemsã¯manã§ããŒãžãèªåçã«èšå®ããŸããã ãã ããã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããgemã®ããã¥ã¢ã«ããã¥ã¡ã³ãããŒãžã衚瀺ã§ããgem-man gemããããŸãã
ããã¥ã¢ã«ãäœæããã«ã¯ãé£ããnroff圢åŒã®ãã¡ã€ã«ãäœæããå¿
èŠããããŸãã ã¿ã¹ã¯ãç°¡çŽ åããã«ã¯ãronnã³ã³ããŒã¿ãŒã©ã€ãã©ãªã䜿çšããŸããããã«ãããããã¥ã¡ã³ãããŒãžãããåçŽãªåœ¢åŒã§äœæã§ããŸãã ãã¹ãŠã®æºåãã§ãããã
gem man awesome_gem
䜿çšããŠããã«ãè¡ã確èªã§ããŸãã ãŸãã¯ã
alias gem='gem man -s'
èšè¿°ã§ããŸãã ãã®å Žåãmanã³ãã³ãã¯gem manã³ãã³ãã«çœ®ãæããããgemã®ãã«ããæ¢ãããšãã§ããŸãã gem-manãåŠçã§ããªãã£ããªã¯ãšã¹ãã«å¯ŸããŠãéåžžã®manã®å¯Ÿå¿ããããŒãžãžã®èªåãªãã€ã¬ã¯ããçºçããŸãã
ããªãèªèº«ã®ãã³ããããäœãããšãèšç»ããŠãããªããæ¬ãèŠãŠãã ãããããã«ããå€ãã®æ³šæãæãããŸãã
ãŠãŒã¶ãŒãã³ãã³ããå®è¡ããããããããã«ãã·ã§ã«ã¬ãã«ã§ããŒã ãèªåè£å®ããããšãã§ããŸãïŒãã¹ãŠã®ã·ã§ã«ã§æ©èœããããã§ã¯ãããŸããïŒã ããã«ãããã¿ããã¿ã³ãæŒããŠãã³ãã³ãåããã¡ã€ã«åãªã©ãèªåçã«è£å®ã§ããŸãã ãŠãŒã¶ãŒã¯ã¹ãã«ãã¹ãããå¯èœæ§ãäœããªããã³ãã³ããæžãæéã倧å¹
ã«ççž®ã§ããŸãã
ã¿ãè£å®ãè¡ããããã°ã©ã å
ã®ã³ãã³ãã®å±¥æŽãä¿åããã«ã¯ïŒirbãªã©ã®ããã°ã©ã ã®å¯Ÿè©±ã¢ãŒãã§ïŒãrubyã«çµã¿èŸŒãŸããreadlineã©ã€ãã©ãªã䜿çšããã ãã§ååã§ãã
gets
代ããã«
Readline.readline
ã³ãã³ãã䜿çšããŠãå
¥åãããã¹ãŠã®ã³ãã³ãã®å±¥æŽãèªåçã«ä¿åã§ããŸãã
ã¿ãè£å®ã¯æ¬¡ã®ããã«è¡ãããŸãã
Readline.completion_proc=(block)
ã
Readline.completion_proc=(block)
ã¡ãœããã«è¿ãããŸãããã®ã¡ãœããã¯ãæ¢ã«å
¥åãããããã¹ãã®è¡ã«è¿œå å¯èœãªé
åãè¿ããŸãããããã¿ã¹ã¯å
šäœã§ãã äŸïŒ
Readline.completion_proc = proc { |input| allowed_commands.grep /^
ãã§ã«å®è¡äžã®ããã°ã©ã ã®ã¬ãã«ã§ã¯ãªããã·ã§ã«ã®ã¬ãã«ã§ã¿ãè£å®ãå¿
èŠãªå Žåãããã¯ããè€éã§ãã
.bashrc
ããããå¿
èŠããã
.bashrc
ã
æåã«ãè¡
complete -F get_my_app_completions my_app
远å
complete -F get_my_app_completions my_app
ããã§ã
my_app()[- ]
ãå
¥åããŠãã
my_app()[- ]
ãå
¥åãã
my_app()[- ]
ã«ã
get_my_app_completions
颿°ãåŒã³åºãããŸãã ãã®é¢æ°ã¯ãå¯èœãªèªåè£å®ãªãã·ã§ã³ã
COMPREPLY
倿°ã«
COMPREPLY
ãŸãããã®å€æ°ã¯ãã·ã§ã«ããŠãŒã¶ãŒã«è¿œå ãªãã·ã§ã³ãæäŸããããã«äœ¿çšããŸãã
.bashrc
ãã®é¢æ°ãå®çŸ©ããå¿
èŠããããŸãã todoã¢ããªã±ãŒã·ã§ã³ã®æ¬ããäŸã瀺ããŸãã
function get_todo_completions() { if [ -z $2 ] ; then
ããã§ãããã°ã©ã ã§æ¬¡ã®åäœãå®è£
ããå¿
èŠããããŸãïŒããã¯ç°¡åãªæŒç¿ãšããŠæ®ããŸãããïŒã
1ïŒã³ãã³ãã©ã€ã³ã§
todo help -c
ãæåã§å
¥åãããšãã¢ããªã±ãŒã·ã§ã³ã³ãã³ãã®ãªã¹ãã衚瀺ãããŸãïŒlistãaddãcompleteãhelpïŒããããç¬èªã®è¡ã«ãããŸãïŒ
2ïŒ
todo help -c complete
ãéå§ãããããŸã å®äºããŠããªããã¹ãŠã®ã¿ã¹ã¯ã®ãªã¹ãã衚瀺ãããŸãïŒå®å
šãªã³ãã³ããé©çšã§ããã¿ã¹ã¯ïŒã
help -c [...]
ã¯ãµãŒãã¹ã³ãã³ãã§ãããã®ååšã¯ç°¡åãªãã«ãã§çç¥ã§ããŸãã ãŠãŒã¶ãŒã䜿çšããã®ã§ã¯ãªãã
.bashrc
ã¹ã¯ãªããã䜿çšããããšãåæãšããŠã
.bashrc
ã
ãã®ã¹ã¯ãªããã§ã¯ã颿°ã¯æ¢ã«å
¥åãããŠãããã®ã«åºã¥ããŠãäœã眮æã§ããããã¢ããªã±ãŒã·ã§ã³èªäœã«å°ããŸãïŒããã¯
help -
ãªãã·ã§ã³ã®åŸã«æž¡ãããŸãïŒã ããã°ã©ã ã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãã®ãããªç¹å¥ãªãã©ã¡ãŒã¿ãŒã»ãããäžãããããšãã®ç¶æ³ãç£èŠããæšæºåºåã«ãã¹ãŠã®ãªãã·ã§ã³ã®ãªã¹ãã衚瀺ããŸãïŒæ¢ã«èŠãããã«ïŒãããããçŽæ¥ã·ã§ã«ã¹ã¯ãªãã
COMPREPLY
éä¿¡ãã
COMPREPLY
ã
ãã®æ¬ã®èè
ã¯ãç¬èªã®GLIã©ã€ãã©ãªã䜿çšããŠããŸããGLIã©ã€ãã©ãªã¯ããã®ãããªãªãã·ã§ã³ã»ãããèªåçã«è¿œè·¡ããŸãã GLIã®å©ããåããã«ããã®æ©èœãç°¡åã«å®è£
ã§ããŸãã ã芧ã®ãšãããããã«ã¯éæ³ã¯ãããŸããã
ä»ã®äººãšããŸãéã¶
ããã°ã©ã éã®äŸ¿å©ãªçžäºäœçšã®å¿
èŠæ§ã®åé¡ã«ã€ããŠã¯è°è«ããŸãããUnixã§åãã誰ãããããã©ãã»ã©éèŠããè©äŸ¡ã§ããŸãã äž»ãªåé¡ã¯ããããéæããæ¹æ³ã§ãã
ãªã¿ãŒã³ã³ãŒã
ãŸãããªã¿ãŒã³ã³ãŒãã䜿çšããŸãã ããã°ã©ã ãæ£åžžã«å®äºããå Žå-0ããšã©ãŒãçºçããå Žå-ãŒã以å€ã®ããŸããŸãªãªã¿ãŒã³ã³ãŒãã ã·ã§ã«ã¹ã¯ãªããã¯ãæåŸã«å®äºããããã°ã©ã ã®ã¹ããŒã¿ã¹ã
$?
倿°ããèŠæ±ããããšã«ãããããã°ã©ã ãæ£åžžã«åäœãããã©ããã倿ã§ãããããããã¯éèŠ
$?
ã æ»ãã¹ããŒã¿ã¹ãè¿ãããã«ãrubyã¯
exit(exit_status)
ã¡ãœããã䜿çšããŸãã
ããŸããŸãªãšã©ãŒã«ããŸããŸãªãªã¿ãŒã³ã³ãŒããå²ãåœãŠããšãèªåã®ããã°ã©ã ã䜿çšããå¥ã®ããã°ã©ã ãåé¡ãä¿®æ£ã§ãããã©ãããããã³æ³šæãæã䟡å€ããããã©ããã倿ã§ããå¯èœæ§ããããŸãã ããã°ã©ã ã®å€ã§ã¯ãããã°ã©ã ããã¯ã©ãã·ã¥ããããã©ãããæããã©ããã確èªããæ¹ãè¯ãã§ãããã ç°ãªããªã¿ãŒã³ã³ãŒãã¯ç°ãªãäŸå€ã¯ã©ã¹ã®ãããªãã®ã§ããRAMããªããšããäºå®ã«ãšã©ãŒããããããããã¯ãŒã¯ãäžç¬æ¶ããã ãã§å詊è¡ãã䟡å€ããããŸãã äžéšã®ããã°ã©ã ã¯ãããã€ãã®ãšã©ãŒã«ããåæã«ã¯ã©ãã·ã¥ããå ŽåããããŸãã äžåºŠã«è€æ°ã®åé¡ãå ±åããå¿
èŠãããå Žåã¯ãããããã¹ã¯ã䜿çšããŸãã ãããã¯ãŒã¯ã«ã¯ãã©ã®ãšã©ãŒã«å¯ŸããŠã©ã®ãªã¿ãŒã³ã³ãŒãã䜿çšããã®ãäžè¬çãã«ã€ããŠã®æšå¥šäºé
ããããŸã
ãGNU ïŒéåžžã«äžè¬çãªïŒããã³
FreeBSD ïŒéåžžã«å
·äœçãªïŒãµã€ãã§ããã«ã€ããŠèªãããšãã§ããŸãã ãšã©ãŒã³ãŒããæ°ã«ããããªãå Žåã¯ãå°ãªããšãæå°éã®åªåãããŠãã ãã-ãšã©ãŒãçºçããå Žåãå°ãªããšãããã€ãã®ãŒã以å€ã®å€ãè¿ããŸãã ããããªããšãä»ã®ããã°ã©ã ã¯ããªãã®ããã°ã©ã ãæ£åžžã«åäœãããã©ãããç¥ãããšããã§ããŸããã
ãšããã§ãã·ã§ã«ã¹ã¯ãªããããã ãã§ãªããrubyã¹ã¯ãªãããããããã°ã©ã ãå®è¡ã§ããŸãã ãããè¡ãã«ã¯ã
Kernel.system
ã
IO.popen
ãªã©ãããã€ãã®ãªãã·ã§ã³ããããŸã
IO.popen
詳现ã«ã€ããŠã¯ãããã¥ã¡ã³ããã芧ãã ããã
system
ã䜿çšããŠå¥ã®ããã°ã©ã ãåŒã³åºãå Žåãåæ§ã®ã·ã§ã«å€æ°
$?
ã§ãã®æ»ãã³ãŒããèŠã€ããããšãã§ããŸã
$?
ã
I / Oã¹ããªãŒã ãšãšã©ãŒã¹ããªãŒã ã ãã€ã
ã³ãã³ãã©ã€ã³ããèµ·åãããããã°ã©ã ã®çžäºäœçšã®äž»ãªæ¹æ³ã¯ãã€ãã§ãã ãã€ãã¯ãããããã°ã©ã ã®åºåãå¥ã®ããã°ã©ã ã®å
¥åã«ãªãã€ã¬ã¯ãããæ¹æ³ã§ãã 瞊æ£ã§ããŒã¯ããããã€ã
|
ã ããšãã°ã
ls | sort
ls | sort
ãæåã®éšå-lsã¯ç»é¢ã«äœã衚瀺ããŸãããã代ããã«ãã®åºåãsortããã°ã©ã ã®å
¥åã«ãªãã€ã¬ã¯ãããŸãã ãŸãããœãŒãããã°ã©ã ã¯å
¥åã¹ããªãŒã ããããã¹ãã1è¡ãã€ååŸãããã§ã«ãœãŒãããããªã¹ããç»é¢ã«è¡šç€ºãããŸãã äžæ¹ã§ã¯ãlsèªäœããã¡ã€ã«ããœãŒãã§ããŸãããããã¯æå³ãããŠããŸããã åæã«ããœãŒãã¯ãã®ç®çã®ããã ãã«å¿
èŠã§ãããå€ãã®ãªãã·ã§ã³ããããŸãã ããšãã°ãååãæ°åã§å§ãŸãå Žåã¯ãèŸæžåŒã§ã¯ãªãè¡ãäžŠã¹æ¿ããããšãã§ããŸãïŒããã§ãªãå Žåãé åºã¯1.jpgã10.jpgã100.jpgã2.jpgã...ã®ããã«ãªããŸãïŒã ãŸãã¯ãéã®é åºã§äžŠã¹æ¿ããŸãã ããã«ãç¹å¥ãªããã°ã©ã ïŒawkãsedãªã©ïŒã䜿çšããŠãæååãäžŠã¹æ¿ããåã«ããããä¿®æ£ã§ããŸãïŒããšãã°ããã¬ãã£ãã¯ã¹ãæ¶å»ããŸãïŒã ãã€ãã¯ä»»æã®æ°ã®ããã°ã©ã ã§æ§æã§ããããšã«æ³šæããŠãã ããã ã ãã
ls | sort -n | tail
ls | sort -n | tail
ls | sort -n | tail
ã¯ãçªå·é ã«ãœãŒãããããã¡ã€ã«ã®ãªã¹ãã®æåŸã®10è¡ã衚瀺ããŸãã
ããã°ã©ã ã§å
¥åºåã¹ããªãŒã ãå¿
èŠã«ãªãçç±ãèããŠãã ããã åºåã¹ããªãŒã ã«æžã蟌ãå
容ãããã³ãšã©ãŒã¹ããªãŒã ã«æžã蟌ãå
å®¹ã æåã«2çªç®ã®è³ªåãæ±ããŸããåºåã¹ããªãŒã ïŒstdoutïŒãšãšã©ãŒïŒstderrïŒã®éãã¯äœã§ããïŒ 1ã€ã®ã¹ã¬ããããã€ãã«æ¥ç¶ãããã1ã€ã®ã¹ã¬ãããæ¥ç¶ããªããšããäºå®ã stderrã¹ããªãŒã ã¯ããšã©ãŒã®åºåã ãã§ãªããããã°ã©ã å®è¡ã®æ®µéããããã°æ
å ±ãªã©ãã¯ãŒã¯ããã»ã¹ã«é¢ããæ
å ±ã®åºåã«ã䜿çšãããŸãã ãã®æ
å ±ã¯ãå¥ã®ããã°ã©ã ã®å
¥åã«æž¡ãããã¹ãã§ã¯ãªãããŠãŒã¶ãŒã®äŸ¿å®ã®ããã«ã®ã¿å¿
èŠã§ãã stdoutã¹ããªãŒã ã¯ãããã°ã©ã ã®çµæãªã©ãä»ã®ãã¹ãŠã®æ
å ±ã«äœ¿çšãããŸãã
人ã ãã§ãªãããã·ã³ãããã°ã©ã ã®åºåãåŠçããå¿
èŠããããããåºå圢åŒã«ã€ããŠèããå¿
èŠããããŸãã ãªãã·ã§ã³
--format=<plain|csv|pretty|html|table|...>
ãäœæããã®ã¯çã«ããªã£ãŠããŸãã 人éãèªãã圢åŒïŒpretty / html / tableïŒãæå®ããå Žåãåºåã®è§£æã®å©äŸ¿æ§ãèæ
®ããã«ãç®ã楜ã«ããæ¹æ³ã§æ
å ±ã衚瀺ã§ããŸãã æ©æ¢°å¯èªåœ¢åŒïŒplain / csvïŒãæå®ããå ŽåãçµæãçŸããèŠãããã©ããã¯é¢ä¿ãããŸãã-äž»ãªããšã¯ãè§£æã容æã«ããããšã§ãã æ§æè§£æã®å©äŸ¿æ§ã®ããã«ãã¿ãåºåãå€ãŸãã¯ã³ã³ãåºåãå€ïŒcsvïŒã䜿çšãããã圢åŒã¯1è¡-å€ããŸãã¯æé©ãªå¥ã®åœ¢åŒã§ãã ãŸããDelight Usersã»ã¯ã·ã§ã³ã§ãã§ããéãå¿«é©ãªçµè«ãåºãæ¹æ³ã«ã€ããŠã説æããŸãã
ãŠãŒã¶ãŒã¯ãããã°ã©ã ãèµ·åãããã³ã«åºå圢åŒãæå®ããããªãããããã¹ãŠã®å Žåã«éžæããããšãåžžã«å¯èœãšã¯éããŸããã åºåã人ã®ç®ãæ©æ¢°ã®ç®ããèªåçã«å€æããããªãã¯ãã€ãŸã
IO#tty?
ã¡ãœããã¯ãã
IO#tty?
ã
$stdout.tty?
åºåã端æ«ã«åããããŠãããã©ãããæããŠãããŸãã ããã§ãªãå Žåãããã°ã©ã ã®åºåã¯ãã€ãã«
ls > output.txt
ãããããã¡ã€ã«ã«ãªãã€ã¬ã¯ããããŸãïŒæ¬¡ã®ããã«ïŒ
ls > output.txt
ïŒã 端æ«ãžã®åºåãšãªãã€ã¬ã¯ããããã¹ããªãŒã ãžã®åºåã§ã¯ãç°ãªãããã©ã«ãã®ãã©ãŒããã
options[:format] = $stderr.tty? ? 'table' : 'csv'
éžæã§ããŸã
options[:format] = $stderr.tty? ? 'table' : 'csv'
options[:format] = $stderr.tty? ? 'table' : 'csv'
ãŸããããšãã°ã人åãã®åºå圢åŒã§ãã¡ã€ã«ã«çµæãåºåããå Žåã¯ã圢åŒãæç€ºçã«æå®ããã ãã§ãã
次ã«ãå
¥åã¹ããªãŒã ã«ã€ããŠèª¬æããŸãã ããã°ã©ã ã¯å
¥åã¹ããªãŒã ããã©ã®ãããªããŒã¿ãåãå
¥ããã¹ãã§ããïŒ ãã¡ãããããã¯ããã°ã©ã ã®è©³çްã«äŸåããŸãã èããŠã¿ãŸããããã©ã®ããŒã¿ãå
¥åã¹ããªãŒã ã«å
¥ããããšãã§ããŸããïŒ æãããªçãã¯ãä»ã®ããã°ã©ã ãåºåã«æã£ãŠãããã®ã§ãã ããšãã°ããããªãã¯ã¹ãã¡ã€ã«ãå¥ã®åœ¢åŒã«å€æããå¥ã®æ¡åŒµåãæã€ãã¡ã€ã«ã«æžã蟌ãããã°ã©ã ããããŸãã å
¥åã¹ããªãŒã ããè¡åãåãå
¥ããããšã¯çã«ããªã£ãŠããŸããïŒ ç§ã®æèŠã§ã¯ãããã§ã¯ãããŸããããã®è¡åãã©ã®ããã«ããããŠãªãå
¥åã¹ããªãŒã ã«å
¥ãã®ã§ããããïŒ äžåºŠã«å€ãã®ãã¡ã€ã«ãåŠçããããã«ã倿°ã®ãã¡ã€ã«åãåãå
¥ããæ¹ãã¯ããã«äŸ¿å©ã§ãã ããã¯ãããšãã°lsã³ãã³ããæäŸã§ããããŒã¿ã§ãã
, , . -, . , , , (, â â Windows-). , , . , .
, ,
$stdin.tty?
, , ( ) â . , , -, , . ( SIGHUP), , , , . SIGINT, Ctrl+C.
Signal.trap
. , , . ( , ) POSIX-, .. Unix, Windows. , , Windows , Unix, - , â , .
â , , Ctrl+C , , :
Signal.trap("SIGINT") do FileUtils.rm output_file exit 1 end
Has sensible defaults but is configurable
, . , - . , -- .
. , â -.
, . , ( ), . , . , â , . (
--use-nonstandard-mode
-u
).
. « -- »? , . , . - (,
--no-scheme --gzip
),
db_backup my_db
.
, .
db_backup --scheme my_db
, . , , , , -âŠ
--login
,
--password
,
--host
,
--force
, , -. , , - .
~/.myapp.rc
. , . -. â . â . .rc â .
? , . YAML. :
--- :gzip: false :force: true :user: "Bob" :password: "Secr3t!"
, .
require 'yaml' require 'optparse'
â . , â .
--- :filename: ~/.todo.txt :url: http:
, YAML â . , â . , , gem rspec, git.
Installs painlessly
, . , rubygems â , :
gem install/update gemname
â , , , , ( ). -
rubygems.org . , , (, , ) gem .
gem install
, rubygems , ( ) . , , , ( -, ). , . , rails 2.3.8 rails 3.2, activesupport-, , .
, ,
, â . , , ruby .
, . « ». : Major.Minor.Patch. â - . API, -. , . , , , : 1.13.2.
, , - minor-. , , , . , API, .
â . , bin , ( bundler -). .../ruby/bin - ( , -, , ). , ruby PATH â . .
Windows , , â bat-, . , .
?
-, -, .rb. Unix, Windows. , .
-, :
#!/usr/bin/env ruby
,
/usr/bin/ruby
.
env
, , rvm.
-, , lib/my_exec.rb, require. , . :
, -? , , . ,
my_app value1 value2
. ? ,
['value1', 'value2']
. ? Unix , . Windows , ..
my_app
Windows, , ( ruby.exe). , , , ruby. ã€ãŸã :
ruby my_app value1 value2
, ruby, , .
, , rubygems bat-? bat- , . rubygems . : . Hello World . , , ( , Windows- , Unix-). , , , rspec. git- ( , ruby). , Windows, - â .
Fails gracefully
.
. stderr , (, , ). , . - , .
- , , ? , , . , ,
--force
. , .
? , .
rm -rf * .log
, , , .
Gets new features and bug fixes easily
â , . , , . , . , , . âŠ
, , ( ) . , , . ( HDD â ). - .
â
aruba , Cucumber CLI. , , , , , - .
( ) â TestUnit rspec-
fakefs . , , â , , . mock- ,
File
,
Dir
( ) , , . . çŸäººïŒ , ( ,
Kernel.system
, ) lib/my_exec .
, aruba, , ? stdout stderr
StringIO
. «». :
out, err = MiniTest::Assertions.capture_io{ ... }
, , .
! -:
STDOUT
$stdout
. StringIO, , . , warning, , . ,
puts
- , .
, (
STDOUT.puts 'smth'
), , ,
STDOUT
,
STDIN
STDERR
.
. , .
ARGV
. , , ? : . shellwords
String#shellsplit
.
, , , ,
ARGV
:
ARGV.replace(new_array)
.
,
OptionParser#parse!
ã
ARGV
OptionParser#parse!(new_array)
, ,
ARGV
. , â .
â . . .
Delights users
.
ããŒãã«
, : , , , . : . â
terminal-table .
è²
, . . : /. - . â
rainbow term-ansicolor . , . , â â . Windows- , . , .
, 10% . , , . diff , . , , , .
! machine-readable â , . , , « » .
. Readline, . , : . rubygems thor , say ask.
? irb rails console. : , JSON- , . JSON, cd, ls, rm mknode. , . .
, , . , , . : ? ? , ? , , stderr - ( , ,
flush
, - , ).
! , .
\r
â .
\r
, (, «» ). ,
puts
, .. .
print
, :
(0..100).each do |i| $stderr.print("\r#{i}% done") sleep(0.1) end
, , : stderr stdout , , .
.
-,
rake ,
thor . â , DSL , .
Rake â make ruby. Rakefile . , bundler Rakefile : build, install, release, . rake â rake release build release. , rake , . , ,
rake.
Thor â rake. «» .
.
, , . . , Ruby on Rails , , .
OptionParser ruby. , . , , â , . , OptionParser , ( â . ) .
OptionParser : ( ; , , , git). OptionParser- ( , ) â . , , â .
GLI . , . .
, , â
docopt . â , , OptionParser . python .
. , , .
PS , , ,
ARGF
. â ,
ARGF
â .