expect

Autres langues

Langue: ja

Autres versions - même langue

Version: 29 December 1994 (openSuse - 09/10/07)

Section: 1 (Commandes utilisateur)

̾Á°

expect - ÂÐÏÃŪ¤Ê¥×¥í¥°¥é¥à¤È¤Î¤ä¤ê¤È¤ê¤ò¼«Æ°²½¤¹¤ë¥×¥í¥°¥é¥à, ¥Ð¡¼¥¸¥ç¥ó 5

½ñ¼°

expect [ -dDinN ] [ -c cmds ] [ -[f|b] ] cmdfile ] [ args ]

¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó

Expect ¤Ï¡¢¥¹¥¯¥ê¥×¥È¤Î»Ø¼¨¤Ë½¾¤Ã¤Æ¡¢ÂÐÏÃŪ¤Ê¥×¥í¥°¥é¥à¤È"²ñÏÃ"¤¹¤ë¥×¥í¥°¥é¥à¤Ç¤¢¤ë¡£ °Ê²¼¤Î¥¹¥¯¥ê¥×¥È¤Ë¼¨¤¹¤è¤¦¤Ë¡¢ Expect ¤Ë¤Ï¡¢ÂÐÏÃ¥×¥í¥°¥é¥à¤«¤é¤Î´üÂÔ¤µ¤ì¤¦¤ëÆþÎϤȤ½¤ì¤ËÂФ¹¤ëÀµ¤·¤¤±þÅú¤ò ¶µ¤¨¤Æ¤ª¤¯¡£¥¤¥ó¥¿¥×¥ê¥¿¤Ïʬ´ô½èÍý¤È¹âÅÙ¤ÊÀ©¸æ¹½Â¤¤òÄ󶡤·¡¢ ÂÐÏÃ¥×¥í¥°¥é¥à¤Ø¤Î»Ø¼¨¤ò¹Ô¤Ê¤¦¡£ ¤µ¤é¤Ë¡¢É¬Íפʻþ¤Ë¥¹¥¯¥ê¥×¥È¤«¤éÀ©¸æ¤òÃ¥¤Ã¤ÆľÀÜ¿Í´Ö¤¬»Ø¼¨¤ò¹Ô¤Ê¤¤¡¢ ¤½¤Î¸å¡¢À©¸æ¤ò¥¹¥¯¥ê¥×¥È¤ØÌ᤹¤³¤È¤¬¤Ç¤­¤ë¡£

Expectk ¤Ï Expect ¤È Tk ¤Îº®¹çʪ¤Ç¤¢¤ë¡£ Expect ¤Ç¤¢¤ê¡¢¤«¤Ä¡¢ Tk's wish ¤Ç¤¢¤ë¤«¤Î¤è¤¦¤Ë¿¶Éñ¤¦¡£ Expect ¤Ï¡¢C ¤¢¤ë¤¤¤Ï C++ (¤Ä¤Þ¤ê¡¢Tcl °Ê³°)¤«¤é¡¢Ä¾ÀܻȤ¦¤³¤È¤â¤Ç¤­¤ë¡£ libexpect(3)¤ò»²¾È¡£

"Expect"¤È¤¤¤¦Ì¾Á°¤Ï¡¢uucp¤Çͭ̾¤Ë¤Ê¤Ã¤¿ send/expect ¤Î³µÇ°¤ËͳÍ褹¤ë¡£ (kermit¤ä¾¤Î¥â¥Ç¥àÀ©¸æ¥×¥í¥°¥é¥à¤Ç¤â¡¢¤³¤Î³µÇ°¤Ï»È¤ï¤ì¤Æ¤¤¤ë) ¤·¤«¤·¡¢uucp ¤È¤Ï°ã¤Ã¤Æ Expect ¤Ï°ìÈ̲½¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢ÁÛÁü¤µ¤ì¤ë¤É¤ó¤Ê¥×¥í¥°¥é¥à¤ä¥¿¥¹¥¯¤ËÂФ·¤Æ¤â ¥Þ¥¯¥í¥³¥Þ¥ó¥É(user-level command)¤È¤·¤Æµ¡Ç½¤Ç¤­¤ë¡£ Expect ¤Ï¡¢Æ±»þ¤ËÊ£¿ô¤Î¥×¥í¥°¥é¥à¤È²ñÏ乤뤳¤È¤¬¤Ç¤­¤ë¡£

Expect ¤Ë¤Ç¤­¤ë¤³¤È¤ÎÎã¤ò¤¤¤¯¤Ä¤«µó¤²¤Æ¤ª¤¯:

*
ÅÅÏÃÂå¤òʧ¤ï¤º¤Ë¥í¥°¥¤¥ó¤Ç¤­¤ë¤è¤¦¤Ë¥³¥ó¥Ô¥å¡¼¥¿¤«¤é¤¢¤Ê¤¿¤ËÅÅÏäò³Ý¤±Ä¾¤µ¤»¤ë¡£
*
¥²¡¼¥à(Î㤨¤Ð rogue)¤ò»Ï¤á¤ë»þ¤Ë¡¢ºÇŬ¤Ê¥Ñ¥é¥á¥¿¤¬¤â¤é¤¨¤Ê¤«¤Ã¤¿¾ì¹ç ºÇŬ¤Ê¥Ñ¥é¥á¥¿¤¬¤â¤é¤¨¤ë¤Þ¤Ç²¿Å٤Ǥâ¥ê¥¹¥¿¡¼¥È¤ò¹Ô¤Ê¤¤¡¢¤½¤Î¸åÀ©¸æ¤ò¿Í´Ö¤Ë°Ü¤¹¡£
*
fsck¤òÁö¤é¤»¤¿»þ¤Ë¸½¤ì¤ë¼ÁÌä¤Ë¡¢Á°¤â¤Ã¤Æ·è¤á¤Æ¤ª¤¤¤¿Êý¿Ë¤Ë½¾¤Ã¤Æ¡¢ "yes", "no", "¼êÆþÎÏ"¤òÀÚÂؤ¨¤Æ¡¢ÊÖÅú¤¹¤ë¡£
*
¾¤Î¥Í¥Ã¥È¥ï¡¼¥¯¤ä BBS(Î㤨¤ÐMCI Mail, CompuServe)¤ËÀܳ¤·¤¿»þ¤Ë ¼«Æ°Åª¤Ë¥á¡¼¥ë¤Î¼è¤ê¹þ¤ß¡¢È¯¿®¤ò¹Ô¤Ê¤¦¡£
*
´Ä¶­ÊÑ¿ô¡¢¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¡¢¤½¤Î¾¤Î¾ðÊó¤ò¡¢rlogin, telnet, tip, su,
 chgrp ¤Ê¤É¤ò¹Ô¤Ê¤Ã¤¿Àè¤Ø»ý¤Ã¤Æ¤¤¤¯¡£

¤³¤ì¤é¤Î½èÍý¤ò¥·¥§¥ë¤¬¹Ô¤Ê¤¨¤Ê¤¤Íýͳ¤Ï¤¿¤¯¤µ¤ó¤¢¤ë (¤ä¤Ã¤Æ¤ß¤ì¤Ð¤ï¤«¤ë¤À¤í¤¦)¡£Á´Éô Expect ¤Ê¤é¤Ç¤­¤ë¡£

°ìÈÌ¤Ë Expect ¤Ï¡¢¥×¥í¥°¥é¥à¤È¥æ¡¼¥¶¡¼¤Î¤ä¤ê¤È¤ê¤¬É¬Í×¤Ê¥×¥í¥°¥é¥à¤òÁö¤é¤»¤ë¤È¤­¤Ë Ìò¤ËΩ¤Ä¡£Âç»ö¤Ê¤³¤È¤Ï¡¢¤³¤Î¤ä¤ê¤È¤ê¤¬¥×¥í¥°¥é¥à¤ÎÀ­³Ê¤ò»ý¤Ã¤Æ¤¤¤ë¤È ¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£ Expect ¤Ï¡¢É¬Íפʤé¥æ¡¼¥¶¡¼¤ËÀ©¸æ¤òÊÖ¤¹¤³¤È¤â¤Ç¤­¤ë(¤·¤«¤â¡¢¥×¥í¥°¥é¥à¤Ï ÃæÃǤµ¤ì¤Ê¤¤)¡£Æ±Íͤˡ¢¥æ¡¼¥¶¡¼¤ÏÀ©¸æ¤ò¤¤¤Ä¤Ç¤â¥¹¥¯¥ê¥×¥È¤ËÊÖ¤¹¤³¤È¤¬¤Ç¤­¤ë¡£

ÍÑË¡

Expect ¤Ï¡¢ cmdfile ¤òÆɤ߹þ¤ß¡¢¼Â¹Ô¤¹¤ë¥³¥Þ¥ó¥É¤Î¥ê¥¹¥È¤òÆÀ¤ë¡£ Expect ¤Ï¡¢#! ɽµ­¤ò¥µ¥Ý¡¼¥È¤¹¤ë OS ¤Ç¡¢ÀèƬ¹Ô¤Ë


    #!/usr/local/bin/expect -f

¤È½ñ¤¤¤Æ¤ª¤¤¤Æ¼Â¹Ô¤µ¤»¤ë¤³¤È¤â¤Ç¤­¤ë¡£ ¤â¤Á¤í¤ó¡¢¥Ñ¥¹¤ÏÀµ³Î¤Ë Expect ¤Î¤¢¤ë¾ì½ê¤ò»Ø¼¨¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ /usr/local/bin ¤Ï¡¢°ìÎã¤Ç¤¢¤ë¡£

-c ¥Õ¥é¥°¤Ç¡¢¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ëÁ°¤Ë¡¢¼Â¹Ô¤¹¤ë¥³¥Þ¥ó¥É¤ò»Ø¼¨¤¹¤ë¡£ ¥³¥Þ¥ó¥É¤Ï¥·¥§¥ë¤Ë²õ¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¥¯¥ª¡¼¥È¤·¤Æ¤ª¤¯¤Ù¤­¤Ç¤¢¤ë¡£ ¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï²¿²ó½Ð¤Æ¤­¤Æ¤â¹½¤ï¤Ê¤¤¡£ Ê£¿ô¥³¥Þ¥ó¥É¤ò»Ø¼¨¤·¤¿¾ì¹ç¤Ï¡¢¥»¥ß¥³¥í¥ó¤ÇÏ¢·ë¤µ¤ì¤¿¥³¥Þ¥ó¥É¤Î¤è¤¦¤Ë °·¤ï¤ì¤ë¡£ ¥³¥Þ¥ó¥É¤Ï¸½¤ì¤¿½ç¤Ë¼Â¹Ô¤µ¤ì¤ë¡£(Expectk ¤Ç¤Ï¡¢ -command ¤È½ñ¤¯)

-d ¥Õ¥é¥°¤Ç¡¢¥Ç¥Ð¥Ã¥°¾ðÊó½ÐÎϤòÍ­¸ú¤Ë¤¹¤ë¡£´ðËÜŪ¤Ë ÆâÉô¤Î¥³¥Þ¥ó¥É(Î㤨¤Ð expect ¤ä interact) ¤Î¿¶Éñ¤¤¤òÊó¹ð¤¹¤ë¡£ ¤³¤Î¥Õ¥é¥°¤Ï"exp_internal 1"¤È¥¹¥¯¥ê¥×¥È¤ÎÀèƬ¤Ë½ñ¤¯¤Î¤ÈƱ¤¸¤³¤È¤À¤¬¡¢ ¤µ¤é¤Ë Expect ¤Î¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤â½ÐÎϤµ¤ì¤ë¡£ ( strace ¥³¥Þ¥ó¥É¤Ï¡¢Ì¿Îá¤ò¥È¥ì¡¼¥¹¤¹¤ë¤Î¤ËÊØÍø¤Ç¤¢¤ë¡£ trace ¥³¥Þ¥ó¥É¤Ï¡¢ÊÑ¿ôÃͤò¥È¥ì¡¼¥¹¤¹¤ë¤Î¤ËÊØÍø¤Ç¤¢¤ë¡£) (Expectk ¤ò»È¤¦»þ¤Ï¡¢¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï -diag ¤È½ñ¤¯¡£)

-D ¥Õ¥é¥°¤ÇÂÐÏ÷¿¥Ç¥Ð¥Ã¥¬¤òÍ­¸ú¤Ë¤¹¤ë¡£À°¿ôÃͤ¬Â³¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ Ãͤ¬ 0 ¤Ç¤Ê¤¤¤«¡¢C ¤¬²¡¤µ¤ì¤ë¤È¡¢¼¡¤Î Tcl ½èÍý¤ÎÁ°¤Ç¥Ç¥Ð¥Ã¥¬¤ËÀ©¸æ¤¬°Ü¤ë¡£ ¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤Ë¤«¤«¤Ã¤¿»þ¤ä¾¤Î¥Ç¥Ð¥Ã¥°Ì¿Îá¤ò¼Â¹Ô¤·¤¿»þ¤â¡¢Æ±¤¸¤Ç¤¢¤ë¡£ ¥Ç¥Ð¥Ã¥¬¤Ë¤Ä¤¤¤Æ¤Î¾ðÊ󤬤â¤Ã¤ÈÍߤ·¤±¤ì¤Ð¡¢ README ¤ä²¼µ­¤Î´ØÏ¢¹àÌܤòÆɤळ¤È¡£ (Expectk ¤ò»È¤Ã¤Æ¤¤¤ë»þ¤Ï¡¢¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï -Debug)

-f ¥Õ¥é¥°¤Ç¡¢¥³¥Þ¥ó¥É¤òÆɤó¤Ç¤¯¤ë¥Õ¥¡¥¤¥ë¤ò»Ø¼¨¤¹¤ë¡£¤³¤Î¥Õ¥é¥°¤Ï ¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤âÎɤ¤¤Î¤À¤¬¡¢#! ɽµ­¤È°ì½ï¤Ë»È¤¦¤È °ú¿ô¤«¤é¥×¥í¥°¥é¥à̾¤ò½ü¤±¤ë¤«¤é¡¢¤½¤Î¾ì¹ç°ÕÌ£¤¬¤¢¤ë¡£ (Expectk ¤Ç¤Ï -file)

¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥³¥Þ¥ó¥É¥Õ¥¡¥¤¥ë¤¬¥á¥â¥ê¤Ë°ìÅÙ¤ËÆɤ߹þ¤Þ¤ì¡¢¤½¤³¤Ç¼Â¹Ô¤µ¤ì¤ë¡£ °ì¹Ô¤º¤Ä¥³¥Þ¥ó¥É¥Õ¥¡¥¤¥ë¤òÆɤó¤ÀÊý¤¬Ë¾¤Þ¤·¤¤¾ì¹ç¤â¤¢¤ë¡£Î㤨¤Ð¡¢ ɸ½àÆþÎϤϤ³¤Î¤è¤¦¤Ë°·¤Ã¤¿Êý¤¬Îɤ¤¡£¶¯À©Åª¤Ë¤³¤Î¥â¡¼¥É¤ò»ØÄꤹ¤ë¤Ë¤Ï¡¢ -b ¥Õ¥é¥°¤ò»ØÄꤹ¤ë¡£ (Expectk¤Ç¤Ï¡¢ -buffer) stdio ¤Î¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤Ï°ÍÁ³Í­¸ú¤Ç¤¢¤ë¤¬¡¢FIFO ¤Þ¤¿¤Ï stdin ¤«¤éÆɤ߹þ¤à¾ì¹ç¤Ï ÌäÂê¤Ïµ¯¤³¤é¤Ê¤¤¤Ï¤º¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£

"-"¤¬¥Õ¥¡¥¤¥ë̾¤È¤·¤ÆÅϤµ¤ì¤ë¤È¡¢É¸½àÆþÎϤ«¤é¥¹¥¯¥ê¥×¥È¤¬Æɤ߹þ¤Þ¤ì¤ë¡£ (ËÜÅö¤Ë"-"¤È¸À¤¦¥Õ¥¡¥¤¥ë¤¬Æɤߤ¿¤±¤ì¤Ð¡¢"./-"¤È½ñ¤¯¤³¤È)

-i ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢ Expect ¤Ï¥Õ¥¡¥¤¥ë¤«¤é¥¹¥¯¥ê¥×¥È¤òÆɤޤº¤ËÂÐÏÃÍÑ¥×¥í¥ó¥×¥È¤òɽ¼¨¤¹¤ë¡£ exit ¥³¥Þ¥ó¥É¤«¡¢EOF ¤ò¼õ¤±¤ë¤È¥·¥§¥ë¤ò½ªÎ»¤¹¤ë¡£ ¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï interpreter (²¼µ­) ¤ò»²¾È¤Î¤³¤È¡£ -i ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ë¤Ï¡¢ ¥³¥Þ¥ó¥É¥Õ¥¡¥¤¥ë¤â -c ¤â»Ø¼¨¤µ¤ì¤Ê¤«¤Ã¤¿¤â¤Î¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤ë¡£ (Expectk¤Ç¤Ï -interactive)

-- ¤Ï¡¢¥ª¥×¥·¥ç¥ó¤Î½ª¤ê¤ò¶èÀÚ¤ë¤Î¤ËÍѤ¤¤é¤ì¤ë(¾Êά²Äǽ)¡£¤³¤ì¤Ï¡¢¤¢¤Ê¤¿¤¬ ¥ª¥×¥·¥ç¥ó¥¿¥¤¥×¤Î°ú¿ô¤ò Expect ¤Ë²ò¼á¤µ¤»¤Ê¤¤¤Ç¡¢¥¹¥¯¥ê¥×¥È¤Ë¤½¤Î¤Þ¤ÞÅϤ·¤¿¤¤»þ¤ËÌò¤ËΩ¤Ä¡£ #! ¹Ô¤Ë¤³¤ì¤òÃÖ¤¤¤Æ¡¢Expect ¤Ë¥ª¥×¥·¥ç¥ó¤È¤·¤Æ²ò¼á¤µ¤»¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³ ¤È¤¬¤Ç¤­¤ÆÊØÍø¤¿¡£

Î㤨¤Ð¡¢°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¯¤È(¥¹¥¯¥ê¥×¥È̾¤â´Þ¤á¤Æ)¥ª¥ê¥¸¥Ê¥ë¤Î°ú¿ô¤Ï¡¢ÊÑ¿ô argv ¤Ë»Ä¤µ¤ì¤ë¡£


    #!/usr/local/bin/expect --

#!¹Ô¤Ë°ú¿ô¤ò²Ã¤¨¤ë¤È¡¢Ä̾ï¤Î getopt(3) ¤ä execve(2) ¤Ç¤Ï¤½¤Î°ú¿ô¤¬¸«¤¨¤Æ¤·¤Þ¤¦ ¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£

-N ¥Õ¥é¥°¤òÍѤ¤¤Ê¤¤¸Â¤ê¡¢¥Õ¥¡¥¤¥ë $exp_library/expect.rc ¤¬(¤¢¤ì¤Ð)¼«Æ°Åª¤Ë ¼Â¹Ô¤µ¤ì¤ë¡£ (Expectk ¤Ç¤Ï¡¢ -NORC) -n ¥Õ¥é¥° (Expectk ¤Ç¤Ï¡¢ -norc) ¤òÍѤ¤¤Ê¤¤¸Â¤ê¡¢ ³¤¤¤Æ¡¢¥Õ¥¡¥¤¥ë ~/.expect.rc ¤¬¡¢¼«Æ°Åª¤Ë¼Â¹Ô¤µ¤ì¤ë¡£ ´Ä¶­ÊÑ¿ô DOTDIR ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢¤½¤³¤¬ .expect.rc ¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê ¤È¤·¤Æ°·¤ï¤ì¤ë¡£

¤³¤ÎÆó¤Ä¤Îrc¥Õ¥¡¥¤¥ë¤Î¼Â¹Ô¤è¤êÀè¤Ë -c ¥Õ¥é¥°¤Ç»Ø¼¨¤µ¤ì¤¿¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤µ¤ì¤ë¡£

-v ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë¡£ (Expectk¤Ç¤Ï¡¢-version)

¥ª¥×¥·¥ç¥ó args ¤Ï¡¢¥ê¥¹¥È¤ËÊÑ´¹¤µ¤ì¤Æ¡¢ÊÑ¿ô argv ¤ËÊݸ¤µ¤ì¤ë¡£ argc ¤Ï¡¢argv ¤Î¥ê¥¹¥ÈĹ(Í×ÁǤοô)¤ËÀßÄꤵ¤ì¤ë¡£

argv0 ¤Ï¡¢¥¹¥¯¥ê¥×¥È̾¤ËÀßÄꤵ¤ì¤ë(¥¹¥¯¥ê¥×¥È¤ò»È¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢ ¥Ð¥¤¥Ê¥ê¤Î̾Á°¤Ë¤Ê¤ë)¡£ Î㤨¤Ð¡¢°Ê²¼¤Î¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë¤È¡¢¥¹¥¯¥ê¥×¥È̾¤ÈºÇ½é¤Î°ú¿ô3¤Ä¤òɽ¼¨¤¹¤ë:




    send_user "$argv0 [lrange $argv 0 2]\n"



¥³¥Þ¥ó¥É

Expect ¤Ï¡¢ Tcl (Tool Command Language)¤ò»ÈÍѤ·¤Æ¤¤¤ë¡£ Tcl ¤Ï¡¢À©¸æ¥Õ¥í¡¼(Î㤨¤Ð if, for, break)¡¢¼°É¾²Á¡¢¤ª¤è¤Ó¡¢ ºÆµ¢¤ä¥×¥í¥·¥¸¥ãÄêµÁÅù¾¤Î¤¤¤¯¤Ä¤«¤Îµ¡Ç½¤òÄ󶡤¹¤ë¡£ ¤³¤³¤Ç»È¤ï¤ì¤Æ¤¤¤ë¤Î¤ËÄêµÁ¤¬¤Ê¤¤¥³¥Þ¥ó¥É(Î㤨¤Ð¡¢ set, if, exec) ¤Ï¡¢Tcl ¥³¥Þ¥ó¥É¤Ç¤¢¤ë¡£(tcl(3)¤ò»²¾È)¡£ Expect ¤Ï¡¢°Ê²¼¤Ëµ­½Ò¤¹¤ëÄɲå³¥Þ¥ó¥É¤ò¥µ¥Ý¡¼¥È¤¹¤ë¡£ µ­½Ò¤¬¤Ê¤¤¾ì¹ç¤Ï¡¢¤½¤Î¥³¥Þ¥ó¥É¤Ï¶õʸ»úÎó¤òÊÖ¤¹¡£

¥³¥Þ¥ó¥É¤Ï¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¤ÎÎó¤Ê¤Î¤Ç¤¹¤°¤Ë¤ï¤«¤ë¤È»×¤¦¤¬¡¢ ¿·¤·¤¤¥æ¡¼¥¶¡¼¤Ï¡¢ spawn, send, expect, interact, ¤¬¡¢¤³¤Î½ç¤Çʤó¤Ç¤¤¤ë¤È¤³¤í¤òÆɤ߻Ϥ᤿Êý¤¬Íý²ò¤·¤ä¤¹¤¤¤È µ¤¤¬¤Ä¤¯¤«¤âÃΤì¤Ê¤¤¡£

¤³¤Î¸À¸ì(Expect ¤È Tcl ¤ÎξÊý)¤Ø¤Î¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó¤È¤·¤Æ¤Ï¡¢ "Exploring Expect"¤È¤¤¤¦ËÜ(´ØÏ¢¹àÌܤò»²¾È)¤¬¥Ù¥¹¥È¤Ç¤¢¤ë¡£ ¤³¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ï¥ê¥Õ¥¡¥ì¥ó¥¹¤È¤·¤Æ½ñ¤¤¤Æ¤¤¤ë¤Î¤Ç¡¢ ´Þ¤Þ¤ì¤Æ¤¤¤ëÎã¤ÏÈó¾ï¤Ë¸Â¤é¤ì¤Æ¤¤¤ë¡£Ãí°Õ¤¹¤ë¤³¤È¡£

¤³¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ç¡¢Âçʸ»ú¤Î"E"¤Ç"Expect"¤È¤¢¤ì¤Ð¡¢¤½¤ì¤Ï¡¢ Expect ¥×¥í¥°¥é¥à¤ò»Ø¤·¡¢°ìÊý¾®Ê¸»ú¤Î"e"¤Ç"expect"¤È¤¢¤ì¤Ð¡¢¤½¤ì¤Ï¡¢ Expect ¥×¥í¥°¥é¥à¤Ë¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë expect ¥³¥Þ¥ó¥É¤ò»Ø¤¹¡£Ãí°Õ¤¹¤ë¤³¤È¡£

close [-slave] [-onexec 0|1] [-i spawn_id]
¥«¥ì¥ó¥È¥×¥í¥»¥¹¤Ø¤Î¥³¥Í¥¯¥·¥ç¥ó¤ò¥¯¥í¡¼¥º¤¹¤ë¡£ ¤Û¤È¤ó¤É¤ÎÂÐÏ÷¿¥×¥í¥°¥é¥à¤¬É¸½àÆþÎϤΠEOF ¤ò¸¡½Ð¤· exit ¤¹¤ë¡£ ¤½¤ì¤æ¤¨¡¢ close ¤Ï¤½¤Î¥×¥í¥»¥¹¤ò kill ¤¹¤ë¤Î¤Ë¤âÄ̾シʬ¤Ç¤¢¤ë¡£ -i ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢Â³¤¯ spawn_id ¤ò»ý¤Ä¥×¥í¥»¥¹¤ò¥¯¥í¡¼¥º¤¹¤ë¡£

expect ¤È interact ¤ÏξÊý¤È¤â¡¢¥«¥ì¥ó¥È¥×¥í¥»¥¹¤¬ exit ¤·¤¿»þÅÀ¤ò¸¡½Ð¤·¤Æ¡¢ÌÀ¼¨¤·¤Ê¤¯¤Æ¤â close ¤ò¼Â¹Ô¤¹¤ë¡£ ¤·¤«¤·¡¢"exec kill $pid" ¤Ê¤É¤Î¤è¤¦¤Ë¡¢¤¢¤Ê¤¿¤¬¥×¥í¥»¥¹¤ò kill ¤·¤Æ¤¤¤ë ¤Ê¤é¡¢ÌÀ¼¨Åª¤Ë close ¤ò¸Æ¤ÖɬÍפ¬¤¢¤ë¡£

-onexec ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢¿·¤·¤¤ spawn ¤¬µ¯¤­¤¿»þ¤Þ¤¿¤Ï¥×¥í¥»¥¹¤¬½Å¤Í¤é¤ì¤¿»þ¤Ë Á°¤Î spawn ¤òÊĤ¸¤ë¤Ù¤­¤«¤É¤¦¤«¤ò»Ø¼¨¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ Á°¤Î spawn id ¤Ç³«¤¤¤¿¤Þ¤Þ¤Ë¤·¤Æ¤ª¤­¤¿¤±¤ì¤Ð¡¢ÃÍ 0 ¤òÍѤ¤¤ë¡£ 0 ¤Ç¤Ê¤¤À°¿ô¤ò»Ø¼¨¤¹¤ë¤È¡¢¿·¤·¤¤¥×¥í¥»¥¹Ãæ¤Ç¤ÏÁ°¤Î spawn ¤Ï¥¯¥í¡¼¥º¤µ¤ì¤ë (¥Ç¥Õ¥©¥ë¥È)¡£

-slave ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢¤½¤Î spawn id ¤ÎÊú¤¨¤Æ¤¤¤ë¥¹¥ì¡¼¥Ö¤Î spawn ¤â¥¯¥í¡¼¥º¤¹¤ë¡£ ("spawn -pty"¤ò»²¾È) ¥³¥Í¥¯¥·¥ç¥ó¤¬¥¯¥í¡¼¥º¤µ¤ì¤ë¤È¡¢¥¹¥ì¡¼¥Ö¤Ï¥ª¡¼¥×¥ó¾õÂ֤Ǥ¢¤Ã¤Æ¤â ¥¯¥í¡¼¥º¤µ¤ì¤ë¡£

¥³¥Í¥¯¥·¥ç¥ó¤Î¥¯¥í¡¼¥º¤¬ÌÀ¼¨¤µ¤ì¤Æ¤¤¤¿¤«Èݤ«¤ËÁ´Á³´Ø¤ï¤ê¤Ê¤¯¡¢ ´Ø·¸¤¹¤ë¥«¡¼¥Í¥ë¥×¥í¥»¥¹¥¹¥í¥Ã¥È¤ò¥¯¥ê¥¢¤·¤Æ¤·¤Þ¤¤¤¿¤±¤ì¤Ð¡¢ wait ¤ò¸Æ¤Ö¤³¤È¡£ close ¤Ï¡¢ wait ¤ò¸Æ¤Ð¤Ê¤¤¡£¥×¥í¥»¥¹¤Ø¤Î¥³¥Í¥¯¥·¥ç¥ó¤ò¥¯¥í¡¼¥º¤¹¤ë¤È¡¢¤½¤Î¥×¥í¥»¥¹¤¬ exit ¤¹¤ë¤È¤¤¤¦Êݾڤ¬¤Ê¤¤¤«¤é¤Ç¤¢¤ë¡£ ¤â¤Ã¤ÈÃΤꤿ¤±¤ì¤Ð¡¢ wait ¤Î¹à¤ò»²¾È¤¹¤ë¤³¤È¡£

debug [[-now] 0|1]
¤Ï¡¢Tcl ¥Ç¥Ð¥Ã¥¬¤òÀ©¸æ¤¹¤ë¡£¥Ç¥Ð¥Ã¥¬¤Ë¤è¤ê¡¢¥¹¥Æ¥Ã¥×¼Â¹Ô¡¢¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤Î ÀßÄê¤Ê¤É¤¬¹Ô¤Ê¤¨¤ë¡£

°ú¿ô¤¬¤Ê¤¤¾ì¹ç¡¢¥Ç¥Ð¥Ã¥¬¤¬Áö¤Ã¤Æ¤¤¤ì¤Ð 1 ¤ò¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð 0 ¤òÊÖ¤¹¡£

°ú¿ô¤¬ 1 ¤Ê¤é¡¢¥Ç¥Ð¥Ã¥¬¤¬µ¯Æ°¤µ¤ì¤ë¡£°ú¿ô¤¬ 0 ¤Ê¤é¡¢¥Ç¥Ð¥Ã¥¬¤¬Ää»ß¤¹¤ë¡£ °ú¿ô 1 ¤ÎÁ°¤Ë -now ¥Õ¥é¥°¤¬¤¢¤ì¤Ð¡¢¥Ç¥Ð¥Ã¥¬¤Ï¨ºÂ¤Ëµ¯Æ°¤µ¤ì¤ë(¤Ä¤Þ¤ê¡¢ debug ¥³¥Þ¥ó¥É¤½¤Î¤â¤Î¤ÎÅÓÃæ¤Ç)¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢¥Ç¥Ð¥Ã¥¬¤Ï¼¡¤Î Tcl ¥³¥Þ¥ó¥É¤«¤é µ¯Æ°¤µ¤ì¤ë¡£

debug ¥³¥Þ¥ó¥É¤Ï¥È¥é¥Ã¥×¤òÊѹ¹¤·¤Ê¤¤¡£ -D ¥Õ¥é¥°¤ò¤Ä¤±¤Æµ¯Æ°¤µ¤»¤¿¾ì¹ç¤È¤Ï¤½¤³¤¬°ã¤¦(¾åµ­»²¾È)¡£

¥Ç¥Ð¥Ã¥¬¤Ë¤Ä¤¤¤Æ¤Ï¡¢README ¥Õ¥¡¥¤¥ë¤È´ØÏ¢¹àÌܤò»²¾È¤¹¤ë¤³¤È¡£

disconnect
fork ¤µ¤ì¤¿¥×¥í¥»¥¹¤òüËö¤«¤éÀÚ¤êÎ¥¤¹¡£¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÇÆ°ºî¤Ï³¤¯¡£ ¥×¥í¥»¥¹¤Ï²Äǽ¤Ç¤¢¤ì¤Ð¼«Ê¬¼«¿È¤Î¥×¥í¥»¥¹¥°¥ë¡¼¥×¤òÍ¿¤¨¤ë¡£ ɸ½àÆþ½ÐÎϤϡ¢/dev/null ¤Ë¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤ë¡£
°Ê²¼¤ÎÃÇÊҤϡ¢ disconnect ¤ò»È¤Ã¤Æ¡¢¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤ò³¤±¤ë¡£



    if {[fork]!=0} exit

    disconnect

    . . .



°Ê²¼¤Î¥¹¥¯¥ê¥×¥È¤Ï¡¢¥Ñ¥¹¥ï¡¼¥É¤òÆɤó¤Ç¡¢°ì»þ´ÖËè¤Ë¥Ñ¥¹¥ï¡¼¥É¤òÍ׵᤹¤ë ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¡£¥¹¥¯¥ê¥×¥È¤Ï¥Ñ¥¹¥ï¡¼¥É¤òÆɤ߹þ¤ó¤Ç¤¤¤ë¤Î¤Ç¡¢ ¥¿¥¤¥×¤¹¤ë¤Î¤Ï°ì²ó¤À¤±¤ÇºÑ¤à¡£ (¥Ñ¥¹¥ï¡¼¥É¤Î¥¨¥³¡¼¤òÈò¤±¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï¡¢ stty ¥³¥Þ¥ó¥É¤ò»²¾È)

    send_user "password?\ "

    expect_user -re "(.*)\n"

    for {} 1 {} {

        if {[fork]!=0} {sleep 3600;continue}

        disconnect

        spawn priv_prog

        expect Password:

        send "$expect_out(1,string)\r"

        . . .

        exit

    }



¥·¥§¥ë¤ÎÈóƱ´ü¼Â¹Ô(&)»þ¤Ë disconnect ¤òÍѤ¤¤ëÍøÅÀ¤Ï¡¢ Expect ¤¬ disconnect ¤ÎÁ°¤ËüËö¾ðÊó¤òÊݸ¤·¤Æ¤ª¤¤¤Æ¡¢¸å¤Ç¿·¤·¤¤ pty ¤Ë¤½¤Î¥Ñ¥é¥á¥¿¤ò ŬÍѤǤ­¤ëÅÀ¤Ë¤¢¤ë¡£ & ¤ò»È¤Ã¤Æ¤¤¤Æ Expect ¤¬À©¸æ¤ò¼õ¤±¤È¤Ã¤Æ disconnect ¤µ¤ì¤Æ¤·¤Þ¤¦¤È¡¢Ã¼Ëö¾ðÊó¤òÆɤ߹þ¤à¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£
exit [-opts] [status]
Expect ¤ò exit ¤µ¤»¤ë¤«¡¢¤½¤Î¤¿¤á¤Î½àÈ÷¤ò¹Ô¤Ê¤¦¡£

-onexit ¥Õ¥é¥°¤Ï¡¢Â³¤¯°ú¿ô¤ò exit ¥Ï¥ó¥É¥é¤È¤·¤ÆÍѤ¤¤ë¡£ °ú¿ô¤¬¤Ê¤±¤ì¤Ð¡¢exit ¥Ï¥ó¥É¥é¤Ï²¿¤â¤·¤Ê¤¤¡£

-noexit ¥Õ¥é¥°¤ò»ØÄꤹ¤ë¤È Expect ¤Ï¡¢exit ¤Î½àÈ÷¤ò¤·¤Æ OS ¤ØÀ©¸æ¤òÊÖ¤¹Ä¾Á°¤ËÄä»ß¤¹¤ë¡£ ¥æ¡¼¥¶¡¼¤ÎÄêµÁ¤·¤¿ exit ¥Ï¥ó¥É¥é¤Ï¡¢Expect ¼«¿È¤ÎÆâÉô¥Ï¥ó¥É¥é¤ÈƱ¤¸¤è¤¦¤Ë ¼Â¹Ô¤µ¤ì¤ë¡£ ¤½¤ì°Ê¾å Expect ¤Î¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤µ¤ì¤ë¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£¤¢¤Ê¤¿¤¬Â¾¤Î Tcl Extension ¤ò Expect ¤Ë¤Ä¤±¤Æ¤¤¤ë¾ì¹ç¤Ë¤³¤Îµ¡Ç½¤Ï°ÕÌ£¤¬¤¢¤ë¡£ Expect ¤Î exit ¤¬¤â¤¦°ìÅٸƤӽФµ¤ì¤ë¤È(¤³¤¦¤¤¤¦¾ì¹ç¤âµ¯¤³¤êÆÀ¤ë)¡¢¥Ï¥ó¥É¥é¤Ï½èÍý¤ò ÊÖ¤µ¤Ê¤¤¡£

exit ¤¹¤ëºÝ¤Ë¡¢Á´¤Æ¤Î spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤Ø¤Î¥³¥Í¥¯¥·¥ç¥ó¤Ï¥¯¥í¡¼¥º¤µ¤ì¤ë¡£ ¥¯¥í¡¼¥º¤Ï EOF ¸¡½Ð¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤ï¤ì¤ë¡£ exit ¤Ï¡¢ÉáÄ̤Πexit(2) ¤¬¹Ô¤Ê¤¦°Ê¾å¤Î¤³¤È¤Ï¤·¤Ê¤¤¡£ ¤½¤ì¤Ç¡¢spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤¬ EOF ¤ò¥Á¥§¥Ã¥¯¤·¤Ê¤¤¾ì¹ç¡¢¤½¤Î¥×¥í¥»¥¹¤Ï Áö¤ê³¤±¤ë¡£(spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤ØÁ÷¤é¤ì¤¿¥·¥°¥Ê¥ë¤òȽÃǤ¹¤ë¤È¤¤¤Ã¤¿¤³¤È ¤Ë¤ÏÊ£¿ô¤Î¾ò·ï¤¬´Ø¤ï¤Ã¤Æ¤¯¤ë¡£¤³¤ì¤é¤Ï¡¢¥·¥¹¥Æ¥à°Í¸¤Ç¤¢¤ê¡¢Åµ·¿Åª¤ÊÆ°ºî¤Ï ³Æ¥·¥¹¥Æ¥à¤Î exit(3) ¤Î¥É¥­¥å¥á¥ó¥È¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë¡£)

status (»ØÄ꤬¤Ê¤¤¤È¤­¤Ï¡¢0 )¤Ï¡¢ Expect ¤Î¡¢½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤È¤·¤Æ¥·¥¹¥Æ¥à¤ËÊÖ¤µ¤ì¤ë¡£ exit ¤Ï¡¢¥¹¥¯¥ê¥×¥È¤Î½ª¤ê¤Ë㤹¤ë¤È¡¢½ñ¤¤¤Æ¤¤¤Ê¤¯¤Æ¤â¼Â¹Ô¤µ¤ì¤ë¡¢

exp_continue [-continue_timer]
exp_continue ¥³¥Þ¥ó¥É¤Ï expect ¼«¿È¤ËÂԤäƤ¤¤¿Ãͤ¬Íè¤Ê¤«¤Ã¤¿»þ¤Î¤è¤¦¤Ë¡¢expect ¤Î¼Â¹Ô¤ò³¤±¤ë¡£ ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï exp_continue ¤Ï»þ´ÖÀڤ쥿¥¤¥Þ¡¼¤ò¥ê¥»¥Ã¥È¤¹¤ë¡£ -continue_timer ¥Õ¥é¥°¤Ï¥¿¥¤¥Þ¡¼¤òºÆ¼Â¹Ô¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¡£ (¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤Ï expect ¤ò»²¾È¤Î¤³¤È¡£)
exp_internal [-f file] value
value ¤¬¥¼¥í¤Ç¤Ê¤±¤ì¤Ð¡¢°Ê¹ß¤Î¥³¥Þ¥ó¥É¤Î¿ÇÃǾðÊó¤ò Expect ÆâÉô¤Î stderr ¤ËÁ÷¤ë¤è¤¦¤Ë¤Ê¤ë¡£ value ¤Ë0¤ò»ØÄꤹ¤ë¤È¤³¤Î½ÐÎϤϻߤޤ롣¤³¤Î¿ÇÃǾðÊó¤Ë¤Ï¡¢¼õ¤±¤È¤Ã¤¿ ¤¹¤Ù¤Æ¤Îʸ»ú¤È¡¢¸½ºß¤Î½ÐÎϤȥѥ¿¡¼¥ó¤ò¥Þ¥Ã¥Á¤µ¤»¤ëÁ´»î¹Ô¤¬ ´Þ¤Þ¤ì¤ë¡£
file ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤È¡¢¤¹¤Ù¤Æ¤ÎÄ̾浪¤è¤Ó¿ÇÃǽÐÎϤ¬¤½¤Î¥Õ¥¡¥¤¥ë¤Ë ½ÐÎϤµ¤ì¤ë¡£( value ¤ÎÃͤȤÏ̵´Ø·¸¤Ë)¡£¤¹¤Ç¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë¿ÇÃǽÐÎÏ¥Õ¥¡¥¤¥ë¤Ï¡¢ ¤¹¤Ù¤Æ¥¯¥í¡¼¥º¤µ¤ì¤ë¡£
-info ¥Õ¥é¥°¤Ï¡¢ºÇ¸å¤Ë»ØÄꤵ¤ì¤¿ info ¥Õ¥é¥°¤Ç¤Ê¤¤°ú¿ô¤ÎÆâÍƤòÊÖ¤¹¡£
exp_open [args] [-i spawn_id]
¸µ¤Î spawn id ¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤¿¥Õ¥¡¥¤¥ë ID ¤òÊÖ¤¹¡£ ¤½¤Î¥Õ¥¡¥¤¥ë ID ¤Ï¡¢Tcl ¤Î open ¥³¥Þ¥ó¥É¤Ç¥ª¡¼¥×¥ó¤·¤¿»þ¤ÈƱÍͤ˰·¤¨¤ë¡£ (spawn id ¤Ï¡¢¤â¤¦»È¤ï¤ì¤ë¤Ù¤­¤Ç¤Ê¤¤¡£ wait ¤â¼Â¹Ô¤¹¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£)

-leaveopen ¥Õ¥é¥°¤Ï¡¢spawn id ¤ò¥ª¡¼¥×¥ó¤·¤¿¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¯¡£ wait ¤¬¡¢¤½¤Î spawn id ¤ËÂФ·¤Æ¼Â¹Ô¤µ¤ì¤Í¤Ð¤Ê¤é¤Ê¤¤¡£

exp_pid [-i spawn_id]
¸½ºß¤Î spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ ID ¤òÊÖ¤¹¡£ -i ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢Í¿¤¨¤é¤ì¤¿ spawn id ¤ËÂФ¹¤ë¥×¥í¥»¥¹¤Î ID ¤òÊÖ¤¹¡£
exp_send
send ¤Î¥¨¥¤¥ê¥¢¥¹¡£
exp_send_error
send_error ¤Î¥¨¥¤¥ê¥¢¥¹¡£
exp_send_log
send_log ¤Î¥¨¥¤¥ê¥¢¥¹¡£
exp_send_tty
send_tty ¤Î¥¨¥¤¥ê¥¢¥¹¡£
exp_send_user
send_user ¤Î¥¨¥¤¥ê¥¢¥¹¡£
exp_version [[-exit] version]
¤Ï¡¢¥¹¥¯¥ê¥×¥È¤¬¸½¥Ð¡¼¥¸¥ç¥ó¤ÎExpect¤ÇÆ°¤¯¤³¤È¤ò³Î¤«¤á¤ë»þ¤ËÌò¤ËΩ¤Ä¡£
°ú¿ô¤¬¤Ê¤±¤ì¤Ð¡¢ Expect ¤Î¸½ºß¤Î¥Ð¡¼¥¸¥ç¥ó¤òÊÖ¤¹¡£¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï¤¢¤Ê¤¿¤Î¥¹¥¯¥ê¥×¥ÈÆâ¤Ç ÀßÄꤷ¤Æ¤âÎɤ¤¡£¤¢¤Ê¤¿¤¬ºÇ¶á¤Î¥Ð¡¼¥¸¥ç¥ó¤ËÆþ¤Ã¤¿µ¡Ç½¤ò»È¤ï¤Ê¤¤¤Î ¤Ç¤¢¤ì¤Ð¡¢¤â¤Ã¤ÈÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
¥Ð¡¼¥¸¥ç¥ó¤Ï¥É¥Ã¥È¤Ç¶èÀÚ¤é¤ì¤¿ 3 ¤Ä¤ÎÈÖ¹æ¤Ç¤¢¤ë¡£ ºÇ½é¤ÎÈÖ¹æ¤Ï¡¢¥á¥¸¥ã¡¼ÈÖ¹æ¤Ç¤¢¤ë¡£ °ã¤¦¥á¥¸¥ã¡¼ÈÖ¹æ¤Î Expect ÍѤ˽ñ¤¤¤¿¥¹¥¯¥ê¥×¥È¤Ï¡¢¤Þ¤ºÆ°¤«¤Ê¤¤¡£ exp_version ¤Ï¡¢¥á¥¸¥ã¡¼Èֹ椬¥Þ¥Ã¥Á¤·¤Ê¤¤¤È¥¨¥é¡¼¤òÊÖ¤¹¡£
2 ÈÖ¤á¤ÎÈÖ¹æ¤Ï¥Þ¥¤¥Ê¡¼ÈÖ¹æ¤Ç¤¢¤ë¡£ »È¤Ã¤Æ¤¤¤ë Expect ¤è¤ê¥Þ¥¤¥Ê¡¼Èֹ椬¤è¤êÂ礭¤¤ Expect ¸þ¤±¤Î¥¹¥¯¥ê¥×¥È¤Ï¡¢ ¿·µ¡Ç½¤Î»ÈÍÑ̤»ÈÍѤˤè¤ë¤¬¡¢Æ°¤«¤Ê¤¤¤«¤âÃΤì¤Ê¤¤¡£ exp_version ¤Ï¥á¥¸¥ã¡¼Èֹ椬¥Þ¥Ã¥Á¤·¤Æ¤â¥Þ¥¤¥Ê¡¼Èֹ椬»È¤Ã¤Æ¤¤¤ë Expect ¤Î¥Ð¡¼¥¸¥ç¥ó¤è¤êÂ礭¤¤¤È¥¨¥é¡¼¤òÊÖ¤¹¡£
3ÈÖ¤á¤ÎÈÖ¹æ¤Ï¡¢¥Ð¡¼¥¸¥ç¥óÈæ³Ó¤Ë¤Ï»È¤ï¤ì¤Ê¤¤¡£ ¤·¤«¤·¡¢Ê¸½ñ¤Î¹¹¿·¤ä¥×¥í¥°¥é¥à¤ÎºÇŬ²½¤¬¹Ô¤Ê¤ï¤ì¤Æ¡¢ Expect ¤Î¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤¬¹¹¿·¤µ¤ì¤ë¤È¡¢Èֹ椬Áý¤¨¤Æ¤¤¤¯¡£ ¿·¤·¤¤¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç¥ó¤¬ÀßÄꤵ¤ì¤ëÅ٤ˡ¢0 ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¤ë¡£
-exit ¥Õ¥é¥°¤ò¤Ä¤±¤ë¤È¡¢¥Ð¡¼¥¸¥ç¥ó¤¬¹ç¤ï¤Ê¤«¤Ã¤¿»þ¤Ë Expect ¤Ï¥¨¥é¡¼¤òɽ¼¨¤· exit ¤¹¤ë¡£
expect [[-opts] pat1 body1] ... [-opts] patn [bodyn]
¤Ï¡¢spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤Î½ÐÎϤ¬¥Ñ¥¿¡¼¥ó¤Î¤É¤ì¤«¤Ë¥Þ¥Ã¥Á¤¹¤ë¤«¡¢ »ØÄꤵ¤ì¤¿»þ´Ö¤¬·Ð²á¤¹¤ë¤«¡¢enf-of-file ¤ò¸«¤Ä¤±¤ë¤«¡¢¤Î¤¤¤º¤ì¤«¤¬ À®Î©¤¹¤ë¤Þ¤Ç¥¦¥§¥¤¥È¤¹¤ë¡£ ºÇ¸å¤Î body ¤¬¶õ¤Ê¤é¡¢¤½¤ì¤Ï¾Êά¤Ç¤­¤ë¡£
°ìÈֺǸå¤Ë¼Â¹Ô¤µ¤ì¤¿ expect_before ¥³¥Þ¥ó¥É¤Î¥Ñ¥¿¡¼¥ó¤¬¡¢¤É¤Î¥Ñ¥¿¡¼¥ó¤è¤êÀè¤Ë¥Á¥§¥Ã¥¯¤µ¤ì¤ë¡£ °ìÈֺǸå¤Ë¼Â¹Ô¤µ¤ì¤¿ expect_after ¥³¥Þ¥ó¥É¤Î¥Ñ¥¿¡¼¥ó¤¬¡¢¤É¤Î¥Ñ¥¿¡¼¥ó¤è¤ê¸å¤Ë¥Á¥§¥Ã¥¯¤µ¤ì¤ë¡£
expect Á´ÂΤؤΰú¿ô¤¬ 1 ¹Ô¤Ë¼ý¤Þ¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢ °ú¿ô¤ò"¥Ö¥ì¡¼¥¹"¤¹¤ë¤³¤È¤Ç¡¢³Æ¹Ô¤Î½ª¤ê¤Ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤ò¤Ä¤±¤ë¤Î¤ò Èò¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¤³¤Î¾ì¹ç¡¢¥Ö¥ì¡¼¥¹¤·¤¿¤Ë¤â¤«¤«¤ï¤é¤ºÄ̾ï¤Î Tcl Ÿ³«¤¬ ȯÀ¸¤¹¤ë¡£
¤â¤·¡¢¥Ñ¥¿¡¼¥ó¤¬¥­¡¼¥ï¡¼¥É eof ¤Ç¤¢¤ì¤Ð¡¢end-of-file ȯ¸«»þ¤Ë½èÍý¤¬¼Â¹Ô¤µ¤ì¤ë¡£ ¤â¤·¡¢¥Ñ¥¿¡¼¥ó¤¬¥­¡¼¥ï¡¼¥É timeout ¤Ç¤¢¤ì¤Ð¡¢¥¿¥¤¥à¥¢¥¦¥È¤¬È¯À¸¤·¤¿»þ¤Ë½èÍý¤¬¼Â¹Ô¤µ¤ì¤ë¡£ timeout ¥­¡¼¥ï¡¼¥É¤¬»È¤ï¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¡¢¥¿¥¤¥à¥¢¥¦¥È»þ¤Ë¤Ï¤Ê¤Ë¤â¤·¤Ê¤¤¡£ ¥Ç¥Õ¥©¥ë¥È¥¿¥¤¥à¥¢¥¦¥È¤Ï 10 ÉäǤ¢¤ë¡£ÀßÄꤹ¤ë¤³¤È¤â¤Ç¤­¤ë¡£ Î㤨¤Ð 30 ÉäÈÀßÄꤷ¤¿¤±¤ì¤Ð¡¢"set timeout 30"¤ò¼Â¹Ô¤¹¤ë¤³¤È¡£ ¥¿¥¤¥à¥¢¥¦¥È¤µ¤»¤Ê¤¤¤¿¤á¤Ë¤Ï¡¢ÃÍ -1 ¤òÀßÄꤹ¤ë¡£ ¤â¤·¡¢¥Ñ¥¿¡¼¥ó¤¬¥­¡¼¥ï¡¼¥É default ¤Ç¤¢¤ì¤Ð¡¢¥¿¥¤¥à¥¢¥¦¥È¤« end-of-file ¤Î¤¤¤º¤ì¤«¤Ç½èÍý¤¬¼Â¹Ô¤µ¤ì¤ë¡£
¥Ñ¥¿¡¼¥ó¤Ë¥Þ¥Ã¥Á¤¹¤ì¤Ð¡¢½èÍý¤Ï¼Â¹Ô¤µ¤ì¤ë¡£ expect ¤Ï¡¢¹Ô¤Ê¤Ã¤¿½èÍý(´ØÏ¢¤¹¤ë¥Ö¥ì¡¼¥¹Æâ¤Î½èÍý)¤Î·ë²Ì¤òÊÖ¤¹¡£ (¥Ñ¥¿¡¼¥ó¤Ë¥Þ¥Ã¥Á¤·¤Ê¤«¤Ã¤¿»þ¤Ï¡¢¶õʸ»úÎó¤òÊÖ¤¹¡£) Ê£¿ô¤Î¥Ñ¥¿¡¼¥ó¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¡¢ºÇ½é¤Ë¥Þ¥Ã¥Á¤·¤¿¥Ñ¥¿¡¼¥ó¤ËÂбþ¤¹¤ë½èÍý¤¬ ¼Â¹Ô¤µ¤ì¤ë¡£
ÂÐÏ÷¿¥×¥í¥°¥é¥à¤«¤é¤Î¿·¤·¤¤½ÐÎϤ¬ Expect ¤ËÆϤ¯¤¿¤Ó¤Ë¡¢¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤ë½ç¤Ë ¥Ñ¥¿¡¼¥ó¤È¤ÎÈæ³Ó¤¬¹Ô¤Ê¤ï¤ì¤ë¡£¤½¤ì¤æ¤¨¡¢¥Þ¥Ã¥Á¤¹¤Ù¤­¤â¤Î¤¬¤Ê¤¤¤³¤È¤ò ³Îǧ¤¹¤ë¤¿¤á¤Ë¡¢¥×¥í¥ó¥×¥È¤Î¤è¤¦¤ËÍè¤ë¤³¤È¤¬¤ï¤«¤Ã¤Æ¤¤¤ë¥Ñ¥¿¡¼¥ó¤òÍÑ°Õ¤¹¤ë ¤³¤È¤¬¤Ç¤­¤ë¡£ ¥×¥í¥ó¥×¥È¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢(¤¢¤Ê¤¿¤¬¼ê¤ÇÂǤĻþ¤ËȽÃǤ·¤Æ¤¤¤ë¤è¤¦¤Ë) timeout ¤òÍѤ¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
¥Ñ¥¿¡¼¥ó¤Ï 3 Ä̤ê¤Ë½ñ¤±¤ë¡£¥Ç¥Õ¥©¥ë¥È¤Ï¡¢Tcl ¤Î string match ¥³¥Þ¥ó¥É¤Î½ñ¼°¤Ç¤¢¤ë¡£(¤³¤Î¥Ñ¥¿¡¼¥ó¤Ï¥°¥í¥Ö¤Ç»²¾È¤µ¤ì¤ë C-shell ¤ÎÀµµ¬É½¸½¤Ë »÷¤Æ¤¤¤ë¡£) -gl ¥Õ¥é¥°¤Ï¡¢Â¾¤Î¥Þ¥Ã¥Á¤«¤é¥Ñ¥¿¡¼¥ó¤òÊݸ¤ë¤Î¤Ë»È¤¦¡£ "-"¤Ç»Ï¤Þ¤ë¥Ñ¥¿¡¼¥ó¤Ï¡¢¤³¤ÎÊýË¡¤ÇÊݸ¤Ù¤­¤Ç¤¢¤ë¡£ ("-"¤Ç»Ï¤Þ¤ëʸ»úÎó¤Ï¾­Íè¤Î³ÈÄ¥¤Ç¡¢¥ª¥×¥·¥ç¥ó¤È¤·¤Æ»È¤ï¤ì¤ë¤«¤âÃΤì¤Ê¤¤¤«¤é)

Î㤨¤Ð¡¢°Ê²¼¤ÎÃÇÊÒ¤Ï¥í¥°¥¤¥ó¤ÎÀ®¸ù¤ò´Æ»ë¤¹¤ë¡£ ( abort ¥¹¥¯¥ê¥×¥È¤Î¤É¤³¤«Â¾¤Î¾ì½ê¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤È²¾Äꤷ¤Æ¤¤¤ë¡£ Ãí°Õ¤¹¤ë¤³¤È¡£)





    expect {

        busy               {puts busy\n ; exp_continue}

        failed             abort

        "invalid password" abort

        timeout            abort

        connected

    }



4ÈÖ¤á¤Î¥Ñ¥¿¡¼¥ó¤Ë¤Ï¥¹¥Ú¡¼¥¹¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¤Î¤Ç¥¯¥ª¡¼¥È¤¬É¬ÍפǤ¢¤ë¡£ ¥¢¥¯¥·¥ç¥ó¤È¥Ñ¥¿¡¼¥ó¤òʬΥ¤¹¤ë¥»¥Ñ¥ì¡¼¥¿¤Ç¤Ê¤¤¤³¤È¤ò»Ø¼¨¤¹¤ëɬÍפ¬¤¢¤ë¡£ (3ÈÖ¤á¤È4ÈÖ¤á¤Î)¤è¤¦¤ËƱ¤¸¥¢¥¯¥·¥ç¥ó¤ò»ý¤Ä¥ê¥¯¥¨¥¹¥È¤âʤ٤ƽñ¤¯É¬Íפ¬ ¤¢¤ë¡£¤³¤ì¤Ï¡¢Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó¤òÍѤ¤¤ë¤³¤È¤Ç²óÈò¤Ç¤­¤ë(²¼µ­»²¾È)¡£ ¥°¥í¥Ö¥¹¥¿¥¤¥ë¥Ñ¥¿¡¼¥ó¤Ë¤Ä¤¤¤Æ¤â¤Ã¤È¾ðÊó¤¬Íߤ·¤±¤ì¤Ð¡¢Tcl ¤Î¥Þ¥Ë¥å¥¢¥ë¤ò Æɤळ¤È¡£
Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó¤Ï¡¢Tcl ¤Î regexp ("regular expression"¤Îû½Ì)¥³¥Þ¥ó¥É¤ÇÄêµÁ¤µ¤ì¤ëʸˡ¤Ë½¾¤¦¡£ regexp¥Ñ¥¿¡¼¥ó¤Ï¡¢ -re ¥Õ¥é¥°¤Ç»Ï¤á¤ë¡£ Á°¤ÎÎã¤ò¡¢regexp ¤Ç½ñ¤­Ä¾¤¹¤È¡¢¤³¤¦¤Ê¤ë¡£:





    expect {

        busy       {puts busy\n ; exp_continue}

        -re "failed|invalid password" abort

        timeout    abort

        connected

    }



¤É¤Á¤é¤Î¥Ñ¥¿¡¼¥ó¤Î¥¿¥¤¥×¤â¡¢"¸ÇÄꤵ¤ì¤Æ¤¤¤Ê¤¤"¡£¤É¤¦¤¤¤¦°ÕÌ£¤«¤È¤¤¤¦¤È¡¢ ʸ»úÎóÁ´ÂΤ˥ޥåÁ¤¹¤ëɬÍפϤʤ¯¤Æ¡¢Ê¸»úÎó¤Î¤É¤³¤Ç¤â¥Þ¥Ã¥Á¤¹¤ì¤Ð Îɤ¤¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£^ ¤¬ÀèƬ¤Ë¥Þ¥Ã¥Á¤¹¤ë¡£ $ ¤¬ËöÈø¤Ë¥Þ¥Ã¥Á¤¹¤ë¡£ ʸ»úÎó¤ÎËöÈø¤Ë¥Þ¥Ã¥Á¤µ¤»¤Ê¤±¤ì¤Ð¡¢spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤«¤é¥¨¥³¡¼¤µ¤ì¤¿ ʸ»úÎó¤ÎÅÓÃæ¤ÇÀÚ¤ê¾å¤²¤Æ¥ì¥¹¥Ý¥ó¥¹¤òÊÖ¤»¤ë¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£ Àµ¤·¤¯½èÍý¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤Æ¤â¡¢½ÐÎϤÏÉÔ¼«Á³¤Ë¸«¤¨¤ë²ÄǽÀ­¤¬¤¢¤ë¡£ ¤½¤ì¤Ç¡¢Ê¸»úÎó¤Î½ª¤ê¤Îʸ»ú¤òÀµ³Î¤Ëµ­½Ò¤Ç¤­¤ë¤Ê¤é¡¢$ ¤ò»È¤¦¤³¤È¤ò´«¤á¤ë¡£

¿¤¯¤Î¥¨¥Ç¥£¥¿¤Ç¤Ï¡¢^ ¤È $ ¤Ï¹ÔƬ¡¢¹ÔËö¤ËÀµ³Î¤Ë¥Þ¥Ã¥Á¤¹¤ë¡£ ¤·¤«¤·¡¢expect ¤Ï¹Ô»Ø¸þ¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢(¹Ô¤Ç¤Ï¤Ê¤¯)¥Ç¡¼¥¿¤Î»Ï¤Þ¤ê¤È½ª¤ê¤Ë ¥Þ¥Ã¥Á¤¹¤ë¡£ ("EXPECT¥Ò¥ó¥È"Æâ¤Î¡¢¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤Î¾Ã²½ÉÔÎɤ˴ؤ¹¤ëÉôʬ¤ò»²¾È¤Î¤³¤È)

-ex ¥Õ¥é¥°¤Ï¡¢"Àµ³Î¤Ë(exact)"»Ø¼¨¤µ¤ì¤¿Ê¸»úÎó¤Ë¥Þ¥Ã¥Á¤¹¤ë¡£ * ¤ä ^ ¤Ê¤É¤Î²ò¼á¤Ï¹Ô¤Ê¤ï¤ì¤Ê¤¤¡£(¤¿¤À¤·¡¢Ä̾ï¤Î Tcl Ÿ³«¤Ï¹Ô¤Ê¤ï¤ì¤ë)¡£ Exact ¥Ñ¥¿¡¼¥ó¤Ï¾ï¤Ë¸ÇÄꤵ¤ì¤Æ¤¤¤ë¡£

-nocase ¥Õ¥é¥°¤Ï¡¢¾®Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤ËÂçʸ»ú¤ËÊÑ´¹¤·¤Æ¤«¤é¥Þ¥Ã¥Á¤µ¤»¤ë¡£ ¥Ñ¥¿¡¼¥ó¤Ë¤Ï±Æ¶Á¤·¤Ê¤¤¡£
½ÐÎϤòÆɤó¤Ç¤¤¤Æ¡¢2000 ¥Ð¥¤¥È¤òĶ¤¨¤Æ¤·¤Þ¤Ã¤¿¥Ç¡¼¥¿¤Ï"˺¤ì¤é¤ì¤ë"¡£ ¤³¤ÎÆ°ºî¤Ï¡¢ match_max ´Ø¿ô¤ÇÊѹ¹¤Ç¤­¤ë¡£ (¶Ëü¤ËÂ礭¤ÊÃͤϥѥ¿¡¼¥ó¥Þ¥Ã¥Á¤ÎÀ­Ç½¤òÄã²¼¤µ¤»¤ë¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£) patlist ¤Ë full_buffer ¤ò»ØÄꤹ¤ë¤È¡¢ match_max ¥Ð¥¤¥È°Ê¾å¤Î¥Ç¡¼¥¿¤ò¼õ¤±¤Æ¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤·¤Ê¤«¤Ã¤¿¤È¤­¤Ë¡¢½èÍý¤¬¼Â¹Ô¤µ¤ì¤ë¡£ full_buffer ¥­¡¼¥ï¡¼¥É¤Î̵ͭ¤Ë´Ø¤ï¤é¤º¡¢Ëº¤ì¤é¤ì¤¿¥Ç¡¼¥¿¤Ï expect_out(buffer) ¤ËÊݸ¤µ¤ì¤ë¡£
patlist ¤Ë¡¢¥­¡¼¥ï¡¼¥É null ¤ò»ØÄꤹ¤ë¤È¡¢¥Ì¥ëʸ»ú¤¬µö²Ä¤µ¤ì ( remove_nulls ¥³¥Þ¥ó¥É¤òÄ̤·¤Æ)¡¢¥Ì¥ëʸ»ú(ASCII 0)¤Ë¥Þ¥Ã¥Á¤¹¤ë¡£ glob ¤ä regexp ¤Ç¤Ï 0 ¥Ð¥¤¥È¤Ë¥Þ¥Ã¥Á¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£
¥Ñ¥¿¡¼¥ó(¤¢¤ë¤¤¤Ï¡¢eol, full_buffer)¤Ë¥Þ¥Ã¥Á¤¹¤ë¤È¡¢¥Þ¥Ã¥Á¤·¤¿Éôʬ¤Îʸ»úÎ󤫡¢ ¤½¤ÎÁ°¤Î¥Þ¥Ã¥Á¤·¤Ê¤«¤Ã¤¿Ê¸»úÎ󤬡¢ÊÑ¿ô expect_out(buffer) ¤ËÊݸ¤µ¤ì¤ë¡£
9 ¸Ä¤Þ¤Ç¤Î¥Þ¥Ã¥Á¤·¤¿Éôʬʸ»úÎó¤Ï¡¢ÊÑ¿ô expect_out(1,string) ¤«¤é expect_out(9,string) ¤ËÊݸ¤µ¤ì¤ë¡£ -indices ¥Õ¥é¥°¤ò¥Ñ¥¿¡¼¥ó¤ÎÁ°¤Ç»ØÄꤹ¤ë¤È¡¢¥Þ¥Ã¥Á¤·¤¿Éôʬʸ»úÎó¤Î ³«»Ï°ÌÃ֤ȽªÎ»°ÌÃÖ¤¬( lrange ¤Î°ú¿ô¤È¤·¤Æ»È¤¨¤ë·Á¤Ç)¡¢ÊÑ¿ô expect_out(X,start) ¤È expect_out(X,end) ¤ËÊݸ¤µ¤ì¤ë¡£ X ¤Ï¿ô»ú¤Ç 0 ¡Á 9 ¤Þ¤Ç¡£ 0 ¤Ï¥Ñ¥¿¡¼¥óÁ´ÂΤ¬¥Þ¥Ã¥Á¤·¤¿Éôʬ¤ò»Ø¼¨¤¹¤ë¡£ Î㤨¤Ð¡¢¥×¥í¥»¥¹¤¬"abcdefgh\n"¤ò½ÐÎϤ·¡¢°Ê²¼¤Î·Á:



    expect "cd"



¤Ç¼õ¤±¤ë¤È¡¢°Ê²¼¤Îʸ¤ò¼Â¹Ô¤·¤¿¤Î¤ÈƱ¤¸·ë²Ì¤È¤Ê¤ë¡£



    set expect_out(0,string) cd

    set expect_out(buffer) abcd



¤³¤Î»þ¡¢"efgh\n"¤Ï½ÐÎϥХåե¡¤Ë»Ä¤ë¡£ ¥×¥í¥»¥¹¤¬"abbbcabkkkka\n"¤ò½ÐÎϤ·¡¢°Ê²¼¤Î·Á:



    expect -indices -re "b(b*).*(k+)"



¤Ç¼õ¤±¤ë¤È¡¢°Ê²¼¤Îʸ¤ò¼Â¹Ô¤·¤¿¤Î¤ÈƱ¤¸·ë²Ì¤Ë¤Ê¤ë¡£



    set expect_out(0,start) 1

    set expect_out(0,end) 10

    set expect_out(0,string) bbbcabkkkk

    set expect_out(1,start) 2

    set expect_out(1,end) 3

    set expect_out(1,string) bb

    set expect_out(2,start) 10

    set expect_out(2,end) 10

    set expect_out(2,string) k

    set expect_out(buffer) abbbcabkkkk



¤³¤Î»þ¡¢"a\n"¤Ï½ÐÎϥХåե¡¤Ë»Ä¤ë¡£ ¥Ñ¥¿¡¼¥ó"*" (¤È -re ".*")¤Ï¡¢¥×¥í¥»¥¹¤«¤é¤Î¥Ç¡¼¥¿¤¬¤µ¤é¤ËÍè¤Ê¤¤¸Â¤ê¡¢ ½ÐÎϥХåե¡¤ò¥Õ¥é¥Ã¥·¥å¤·¤Ê¤¤¡£
Ä̾¥Þ¥Ã¥Á¤·¤¿½ÐÎÏ¤Ï Expect ¤ÎÆâÉô¥Ð¥Ã¥Õ¥¡¤«¤é¡¢ÀÚ¤ê¼Î¤Æ¤é¤ë¡£ ¤³¤ÎÆ°ºî¤Ï¡¢ -notransfer ¥Õ¥é¥°¤ÇÍ޻ߤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¤³¤Î¥Õ¥é¥°¤Ï¡¢¥¹¥¯¥ê¥×¥È¤ò»î¤·¤Æ¤¤¤ë»þ¤Ë Ìò¤ËΩ¤Ä(¤½¤·¤Æ¡¢"-not"¤Èάµ­¤·¤Æ¤âÎɤ¤)¡£
¥Þ¥Ã¥Á¤·¤¿½ÐÎϤòÁ÷¤Ã¤Æ¤­¤¿¥×¥í¥»¥¹¤Ø¤Î spawn id ¤Ï¡¢ expect_out(spawn_id) ¤ËÊݸ¤µ¤ì¤ë¡£
-timeout ¥Õ¥é¥°¤Ï¡¢¤³¤Î expect ¥³¥Þ¥ó¥É¤ÎÃæ¤Î timeout »þ¹ï¤ò timeout ÊÑ¿ô¤Ç¤Ê¤¯ »Ø¼¨¤µ¤ì¤¿ÃͤËÀßÄꤹ¤ë¡£
¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥Ñ¥¿¡¼¥ó¤Ï¥«¥ì¥ó¥È¥×¥í¥»¥¹¤«¤é¤Î½ÐÎϤ˥ޥåÁ¤µ¤»¤ë¤Î¤À¤¬¡¢ -i ¥Õ¥é¥°¤òÀßÄꤹ¤ë¤È¡¢»ØÄꤵ¤ì¤¿ spawn_id ¥ê¥¹¥È¤ËÂбþ¤¹¤ë¥×¥í¥»¥¹·²¤«¤é¤Î½ÐÎÏ¤Ë ¥Þ¥Ã¥Á¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£(¼¡¤Î -i ¤Ç¤Î»ØÄ꤬¤¢¤ë¤Þ¤ÇÍ­¸ú¤Ç¤¢¤ë¡£) spawn_id ¥ê¥¹¥È¤Ï¡¢¥¹¥Ú¡¼¥¹¤Ç¶èÀڤä¿ spawn_id ¤Î¥ê¥¹¥È¤«¡¢¤½¤Î¤è¤¦¤ÊÃͤò»ý¤Ä ÊÑ¿ô¤Ø¤Î»²¾È¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
Î㤨¤Ð¡¢°Ê²¼¤ÎÎã¤Ï¥«¥ì¥ó¥È¥×¥í¥»¥¹¤«¤é¤Î"connected"¤È $proc2 ¤È¸À¤¦Ì¾Á°¤Î spawn_id ¤«¤é¤Î"busy","failed","invalid password" ¤òÂÔ¤Á¼õ¤±¤ë¡£



    expect {

        -i $proc2 busy {puts busy\n ; exp_continue}

        -re "failed|invalid password" abort

        timeout abort

        connected

    }



Âç°èÊÑ¿ô any_spawn_id ¤ÎÃͤϡ¢ º£¤Î expect ¥³¥Þ¥ó¥ÉÆâ¤Ç -i ¥Õ¥é¥°¤ò»Ø¼¨¤·¤¿ spawn_id ¤ÎÁ´¤Æ¤Ë¥Þ¥Ã¥Á¤µ¤»¤ë¤¿¤á¤Ë»È¤ï¤ì¤ë¡£ -i ¥Õ¥é¥°¤ò¥Ñ¥¿¡¼¥ó¤Ê¤·¤Ç»ØÄꤹ¤ë¤È(¤¹¤Ê¤ï¤Á¡¢Ê̤Π-i ¤¬Ä¾¸å¤Ë³¤¯¤È)¡¢ any_spawn_id ¤Ç»ØÄꤵ¤ì¤¿¡¢Æ±¤¸ expect ¥³¥Þ¥ó¥ÉÆâ¤Î¾¤Î¥Ñ¥¿¡¼¥ó¤ËÂФ·¤Æ¡¢Í­¸ú¤Ë¤Ê¤ë¡£

-i ¥Õ¥é¥°¤Ë¤Ï¡¢¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤Î̾Á°¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤ë¡£¤½¤Î¾ì¹ç¡¢ ¤½¤ÎÊÑ¿ô¤Ï¡¢spawn id ¤Î¥ê¥¹¥È¤Ç¤¢¤ë¡£ÊÑ¿ô¤ÏÊѤï¤ë¤¿¤Ó¤ËÆɤßľ¤µ¤ì¤ë¡£ ¤³¤¦¤¹¤ë¤³¤È¤Ç¡¢¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë´Ö¤Ë I/O ¥½¡¼¥¹¤òÊѹ¹¤¹¤ë¤³¤È ¤¬¤Ç¤­¤ë¡£¤³¤ÎÊýË¡¤Ç»ØÄꤵ¤ì¤ë spawn id ¤ò"´ÖÀÜ(indirect)" spawn id ¤È¸Æ¤Ö¡£

break ¤ä continue ¤Ê¤É¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢À©¸æ¹½Â¤(¤¹¤Ê¤ï¤Á¡¢ for,proc )Æâ¤ÇÄ̾ïÄ̤ê¤Î¿¶Éñ¤¤¤ò¤¹¤ë¡£

exp_continue ¥³¥Þ¥ó¥É¤Ï¡¢ expect ¥ë¡¼¥×¤«¤éÈ´¤±¤ë¤è¤¦¤Ê¾õ¶·¤Ç¼Â¹Ô¤ò³¤±¤µ¤»¤ë¡£

¥ë¡¼¥×¤ò½ñ¤¤¤¿¤ê¡¢expect ¥³¥Þ¥ó¥É¤ò·«¤êÊÖ¤¹¤³¤È¤òÈò¤±¤ë»þ¤ËÊØÍø¤Ç¤¢¤ë¡£ °Ê²¼¤ÎÎã¤Ï¥í¥°¥¤¥ó¤ò¼«Æ°²½¤¹¤ë¥³¡¼¥É¤ÎÃÇÊҤǤ¢¤ë¡£ exp_continue ¤Ë¤è¤Ã¤Æ¡¢(ºÆ¤Ó¥×¥í¥ó¥×¥È¤òõ¤¹¤¿¤á¤Î)2 ¤Ä¤á¤Î expect ¥³¥Þ¥ó¥É¤ò½ñ¤«¤Ê¤¯¤ÆºÑ¤ó¤Ç¤¤¤ë¡£



    expect {

        Password: {

            stty -echo

            send_user "password (for $user) on $host: "

            expect_user -re "(.*)\n"

            send_user "\n"

            send "$expect_out(1,string)\r"

            stty echo

            exp_continue

        } incorrect {

            send_user "invalid password or account\n"

            exit

        } timeout {

            send_user "connection to $host timed out\n"

            exit

        } eof {

            send_user \

                "connection to host failed: $expect_out(buffer)"

            exit

        } -re $prompt

    }



Î㤨¤Ð¡¢°Ê²¼¤ÎÃÇÊҤϴû¤Ë¼«Æ°²½¤µ¤ì¤Æ¤¤¤ë¥æ¡¼¥¶¡¼¥¬¥¤¥É¤Ø¤Î¤ä¤ê¤È¤ê¤ò Êä½õ¤¹¤ë¡£ ¤³¤Î¾ì¹ç¡¢Ã¼Ëö¤Ï raw ¥â¡¼¥É¤Ë¤Ê¤ë¡£ ¥æ¡¼¥¶¡¼¤¬'+'¤ò²¡¤¹¤ÈÊÑ¿ô¤¬¥¤¥ó¥¯¥ê¥á¥ó¥È¤µ¤ì¤ë¡£ "p"¤¬²¡¤µ¤ì¤ë¤È¡¢¥×¥í¥»¥¹¤ØÉüµ¢¾ðÊó¤¬Á÷¤é¤ì¤ë¡£ ¤ª¤½¤é¤¯¤ÏƱ¤¸¤è¤¦¤Ë"i"¤¬²¡¤µ¤ì¤ë¤È¡¢¥¹¥¯¥ê¥×¥È¤«¤éÀ©¸æ¤òÃ¥¤¤¡¢ ¥æ¡¼¥¶¡¼¤«¤é¤ÎÀ©¸æ¤¬¹Ô¤Ê¤¨¤ë¡£ ¤É¤Î¾ì¹ç¤â exp_continue ¥³¥Þ¥ó¥É¤¬¡¢º£¤Î expect ¤Ë¡¢½èÍý¤ò¹Ô¤Ê¤ï¤»¤¿¸åºÆ¤Ó¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤µ¤»¤Æ¤¤¤ë¡£



    stty raw -echo

    expect_after {

        -i $user_spawn_id

        "p" {send "\r\r\r"; exp_continue}

        "+" {incr foo; exp_continue}

        "i" {interact; exp_continue}

        "quit" exit

    }



¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ exp_continue ¤Ï¡¢¥¿¥¤¥à¥¢¥¦¥È¥¿¥¤¥Þ¡¼¤ò¥ê¥»¥Ã¥È¤¹¤ë¡£ ¥¿¥¤¥Þ¤òºÆ³«¤µ¤»¤ë¤Ë¤Ï¡¢ exp_continue ¥³¥Þ¥ó¥É¤Ë -continue_timer ¥Õ¥é¥°¤ò¤Ä¤±¤ë¡£
expect_after [expect_args]
¤Ï¡¢ expect_before ¤ÈƱÍͤÎÆ°¤­¤ò¤¹¤ë¤¬¡¢ expect ¤È expect_after ¤ÎξÊý¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¡¢ expect ¤Î¥Ñ¥¿¡¼¥ó¤¬»ÈÍѤµ¤ì¤ëÅÀ¤¬°Û¤Ê¤ë¡£ ¤è¤ê¾Ü¤·¤¤¾ðÊó¤Ï¡¢ expect_before ¥³¥Þ¥ó¥É¤Î¹à¤ò»²¾È¤Î¤³¤È¡£
expect_background [expect_args]
¤Ï¡¢ expect ¤ÈƱ¤¸°ú¿ô¤ò¤È¤ë¤¬¡¢¤½¤Î¾ì¤ÇÉüµ¢¤¹¤ë¡£ ¥Ñ¥¿¡¼¥ó¤Ï¿·¤·¤¤¥Ç¡¼¥¿¤¬ÆϤ¯¤¿¤Ó¤Ë¥Á¥§¥Ã¥¯¤µ¤ì¤ë¡£ ¥Ñ¥¿¡¼¥ó timeout ¤È default ¤Ï¡¢ expect_background ¤Ë¤Ï¡¢°ÕÌ£¤¬¤Ê¤¤¤·¡¢Ìµ»ë¤µ¤ì¤ë¡£ expect ¤ÈƱÍͤˡ¢ expect_background ¥³¥Þ¥ó¥É¤Ï expect_before ¤ä expect_after ¥Ñ¥¿¡¼¥ó¤ò»È¤¨¤ë¡£

expect_background ¥¢¥¯¥·¥ç¥ó¤¬¡¢É¾²Á¤µ¤ì¤ë»þ¡¢Æ±¤¸ spawn id ¤ò»ý¤Ä ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¥×¥í¥»¥¹¤Ï¥Ö¥í¥Ã¥¯¤µ¤ì¤ë¡£ ¥¢¥¯¥·¥ç¥ó¤¬´°Î»¤¹¤ë¤È¡¢¥×¥í¥»¥¹¤¬¥¢¥ó¥Ö¥í¥Ã¥¯¤µ¤ì¤ë¡£ ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¥×¥í¥»¥¹¤¬¥Ö¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë´Ö¤Ï¡¢ (¥Õ¥©¥¢¥°¥é¥¦¥ó¥É¤Î) expect ¤Ç¡¢Æ±¤¸ spawn id ¤ËÀܳ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ µÕ¤Ë¡¢ expect_background ¤¬¥Ö¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Ê¤¤´Ö¤Ï expect ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£ ÆÃÄê¤Î spawn id ¤Ø¤Î expect_background ¤Ï¡¢Æ±°ì spawn id ¤Ø¤Î¿·¤·¤¤ expect_background ¤ò»ØÄꤹ¤ë¤È ºï½ü¤µ¤ì¤ë¡£ ¥Ñ¥¿¡¼¥ó¤ò¤Ä¤±¤Ê¤¤ expect_background ¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤µ¤»¤ë¤³¤È ¤ò¤ä¤á¤µ¤»¤é¤ì¤ë¡£

expect_before [expect_args]
¤Ï expect ¤ÈƱ¤¸°ú¿ô¤ò¤È¤ë¤¬¡¢¤½¤Î¾ì¤ÇÉüµ¢¤¹¤ë¡£ ¤â¤Ã¤È¤âºÇ¶á¡¢Æ±¤¸ spawn id ¤ËÂФ·¤Æ expect_before ¤Ç»È¤ï¤ì¤¿¥Ñ¥¿¡¼¥ó¡¦¥¢¥¯¥·¥ç¥ó¤Î¥Ú¥¢¤¬¡¢Â³¤¯ expect ¥³¥Þ¥ó¥É¤ËÂФ·¤Æ»ÈÍѤµ¤ì¤ë¡£ ¥Ñ¥¿¡¼¥ó¤¬¥Þ¥Ã¥Á¤¹¤ë¤È¡¢ expect ¥³¥Þ¥ó¥É¤Ë¥Þ¥Ã¥Á¤·¤¿»þ¤ÈƱ¤¸¤è¤¦¤ËÆ°ºî¤¹¤ë¡£ ½èÍý¤Ï¡¢¤½¤Î expect ¤Î¥³¥ó¥Æ¥­¥¹¥È¤Ç¹Ô¤Ê¤ï¤ì¤ë¡£ expect_before ¤È expect ¤ÎξÊý¤Î¥Ñ¥¿¡¼¥ó¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¡¢ expect_before ¤Î¥Ñ¥¿¡¼¥ó¤¬»È¤ï¤ì¤ë¡£

¥Ñ¥¿¡¼¥ó¤¬»Ø¼¨¤µ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¡¢spawn id ¤Ï ¤É¤Î¥Ñ¥¿¡¼¥ó¤Ç¤â¥Á¥§¥Ã¥¯¤µ¤ì¤Ê¤¤¡£

-i ¥Õ¥é¥°¤ò¤µ¤é¤Ë»ØÄꤷ¤Ê¤¤¸Â¤ê¡¢ expect_before ¥Ñ¥¿¡¼¥ó¤Ï¡¢ expect_before ¤¬¼Â¹Ô¤µ¤ì¤¿»þ¤ËÄêµÁ¤µ¤ì¤¿¥Ñ¥¿¡¼¥ó¤Ë¥Þ¥Ã¥Á¤¹¤ë¡£

-info ¥Õ¥é¥°¤Ï expect_before ¤«¤é¡¢¥Þ¥Ã¥Á¥Ñ¥¿¡¼¥ó¤Î¸½ºß¤Î¾õÂÖ¤òÉüµ¢¤µ¤»¤ë¡£ ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¸½ºß¤Î spawn id ¤ËÊó¹ð¤¹¤ë¡£¥ª¥×¥·¥ç¥ó¤Î spawn id ¤ò »ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤ë¡£Î㤨¤Ð¡¢




    expect_before -info -i $proc



¤¿¤Ã¤¿°ì¤Ä¤Î spawn id »ØÄê¤À¤±¤¬µö¤µ¤ì¤ë¡£-indirect ¥Õ¥é¥°¤Ç¡¢Ä¾ÀÜ spawn id ¤òÍ޻ߤ·¡¢´ÖÀÜŪ¤Ê»ØÄ꤫¤éÆÀ¤é¤ì¤ëid¤ò»Ø¼¨¤¹¤ë¡£

spawn id ¤ò»Ø¼¨¤¹¤ëÂå¤ï¤ê¤Ë¡¢"-all"¥Õ¥é¥°¤ò»È¤Ã¤Æ¡¢ Á´¤Æ¤Î spawn id ¤Ë "-info" ¤ÎÊó¹ð¤ò¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

-info ¥Õ¥é¥°¤ò»È¤Ã¤¿»þ¤Î½ÐÎÏ·ë²Ì¤Ï¡¢expect_before ¤Ø¤Î°ú¿ô¤È¤·¤Æ ºÆÍøÍѤǤ­¤ë¡£

expect_tty [expect_args]
¤Ï¡¢ expect ¤È»÷¤¿Æ°¤­¤ò¤¹¤ë¤¬¡¢Ê¸»úÎó¤ò /dev/tty (¤¹¤Ê¤ï¤Á¡¢¥æ¡¼¥¶¡¼¤«¤é¤Î¥­¡¼ÆþÎÏ) ¤«¤éÆɤ߹þ¤à¡£ ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢cooked mode ¤ÇÆɤ߹þ¤Þ¤ì¤ë¤Î¤Ç¡¢ ¹Ô¤Ï¥ê¥¿¡¼¥ó¤Ç½ª¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤½¤¦¤·¤Ê¤¤¤È expect ¤¬Æɤá¤Ê¤¤¡£¤³¤ÎÆ°¤­¤Ï¡¢ stty ¤ò»È¤Ã¤ÆÊѤ¨¤é¤ì¤ë¡£ (²¼¤Î stty ¥³¥Þ¥ó¥É¤ò»²¾È)
expect_user [expect_args]
¤Ï expect ¤È»÷¤¿Æ°¤­¤ò¤¹¤ë¤¬¡¢Ê¸»úÎó¤ò stdin(¤¹¤Ê¤ï¤Á¡¢¥æ¡¼¥¶¡¼¤«¤é¤Î¥­¡¼ÆþÎÏ) ¤«¤éÆɤ߹þ¤à¡£ ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢cooked mode ¤ÇÆɤ߹þ¤Þ¤ì¤ë¤Î¤Ç¡¢ ¹Ô¤Ï¥ê¥¿¡¼¥ó¤Ç½ª¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤½¤¦¤·¤Ê¤¤¤È expect ¤¬Æɤá¤Ê¤¤¡£¤³¤ÎÆ°¤­¤Ï¡¢ stty ¤ò»È¤Ã¤ÆÊѤ¨¤é¤ì¤ë¡£ (²¼¤Î stty ¥³¥Þ¥ó¥É¤ò»²¾È)
fork
¤Ï¡¢¿·¤·¤¤¥×¥í¥»¥¹¤òºî¤ë¡£¤³¤Î¿·¤·¤¤¥×¥í¥»¥¹¤Ï¡¢¸½ºß¤Î Expect ¥×¥í¥»¥¹¤ÎÀµ³Î¤Ê¥³¥Ô¡¼¤Ç¤¢¤ë¡£ À®¸ù¤¹¤ë¤È fork ¤Ï ¿·¤·¤¤(»Ò)¥×¥í¥»¥¹¤Ë 0 ¤òÊÖ¤·¡¢¿Æ¥×¥í¥»¥¹¤Ë »Ò¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ID¤ò ÊÖ¤¹¡£ ¼ºÇÔ¤¹¤ë(¥¹¥ï¥Ã¥×¡¢¥á¥â¥ê¤Ê¤É¤Î¥ê¥½¡¼¥¹ÉÔ­¤«?)¤È¡¢ fork ¤Ï¡¢¿Æ¥×¥í¥»¥¹¤Ë -1 ¤òÊÖ¤¹¡£¿·¤·¤¤»Ò¥×¥í¥»¥¹¤ÏºîÀ®¤µ¤ì¤Ê¤¤¡£
¥Õ¥©¡¼¥¯¤µ¤ì¤¿¥×¥í¥»¥¹¤Ï¡¢ exit ¥³¥Þ¥ó¥É¤Ç ext ¤Ç¤­¤ë¡£¸µ¤Î¥×¥í¥»¥¹¤ÈƱÍͤǤ¢¤ë¡£ ¥Õ¥©¡¼¥¯¤µ¤ì¤¿¥×¥í¥»¥¹¤Ï¥í¥°¥Õ¥¡¥¤¥ë¤òºî¤Ã¤Æ¤âÎɤ¤¡£Â¿¤¯¤Î¥×¥í¥»¥¹¤Ç ¥Ç¥Ð¥Ã¥°¤â¥í¥°¤â¤Ç¤­¤Ê¤±¤ì¤Ð¡¢·ë²Ì¡¢º®Í𤹤ë¤À¤±¤Ç¤¢¤ë¡£
pty ¤Î¥¤¥ó¥×¥ê¥á¥ó¥Æ¡¼¥·¥ç¥ó¤ÎÃæ¤Ë¤Ï¡¢Ê£¿ô¤ÎÆɤ߼ê¤È½ñ¤­¼ê¤¬°ì½Ö¤Ç¤â¤¢¤ì¤Ð¡¢ º®Í𤹤ë¤â¤Î¤¬¤¢¤ë¡£¤½¤ì¤Ç¡¢¥×¥í¥»¥¹¤ò spawn ¤¹¤ëÁ°¤Ë¤Ï fork ¤·¤Æ¤ª¤¯¤Î¤¬°ìÈÖ°ÂÁ´¤Ç¤¢¤ë¡£
interact [string1 body1] ... [stringn [bodyn]]
¤Ï¡¢¸½¥×¥í¥»¥¹¤ÎÀ©¸æ¤ò¥æ¡¼¥¶¡¼¤ËÅϤ¹¡£·ë²Ì¡¢ ¸½¥×¥í¥»¥¹¤ËÁ÷¤é¤ì¤¿¥­¡¼¥¹¥È¥í¡¼¥¯¤È¸½¥×¥í¥»¥¹¤Îɸ½à½ÐÎϤÈɸ½à¥¨¥é¡¼½ÐÎϤ¬ Éüµ¢¤¹¤ë¡£
string ¤È body ¤ÎÁȤ¬¡¢°ú¿ô¤È¤·¤Æ»Ø¼¨¤Ç¤­¤ë¡£(¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ ʸ»úÎó¤Ï¸½¥×¥í¥»¥¹¤Ë¤ÏÁ÷¤é¤ì¤Ê¤¤) ºÇ¸å¤Î body ¤¬¤Ê¤¤¤È¡¢ interpreter ¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤µ¤ì¤ë¡£
interact ¥³¥Þ¥ó¥ÉÁ´ÂΤؤΰú¿ô¤¬°ì¹Ô¤Ë¼ý¤Þ¤é¤Ê¤¤¾ì¹ç¡¢"brace"¤¹¤ë¤³¤È¤Ç³Æ¹Ô¤Î½ª¤ê¤Ë ¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤òÆþ¤ì¤ë¤Î¤òÈò¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¤³¤Î¾ì¹ç¡¢Tcl ¤ÎŸ³«¤Ï ¥Ö¥ì¡¼¥¹¤·¤Æ¤¢¤Ã¤Æ¤âµ¯¤³¤ë¡£
Î㤨¤Ð¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É¤Ï³¤¯ string body ¤ÎÁȤÈÂÐÏ乤롣 : ^Z ¤¬²¡¤µ¤ì¤ë¤È Expect ¤Ï¥µ¥¹¥Ú¥ó¥É¤¹¤ë¡£ ( -reset ¥Õ¥é¥°¤Ï¡¢Ã¼Ëö¥â¡¼¥É¤òÉüµì¤µ¤»¤ë¡£) ^A ¤¬²¡¤µ¤ì¤ë¤È¡¢¥æ¡¼¥¶¡¼¤Ë¤Ï"you typed a control-A"¤¬Ê֤롣
 $ ¤¬²¡¤µ¤ì¤ë¤È¡¢¥æ¡¼¥¶¡¼¤Ë¤ÏÆüÉÕ¤¬Ê֤롣 ^C ¤¬²¡¤µ¤ì¤ë¤È¡¢ Expect ¤Ï¡¢exit ¤¹¤ë¡£ "foo"¤¬ÆþÎϤµ¤ì¤ë¤È¡¢¥æ¡¼¥¶¡¼¤Ë "bar" ¤¬Ê֤롣 ~~ ¤¬²¡¤µ¤ì¤ë¤È¡¢ Expect ¥¤¥ó¥¿¥×¥ê¥¿¤Ï¡¢ÂÐÏå⡼¥É¤Ë¤Ê¤ë¡£





    set CTRLZ \032

    interact {

        -reset $CTRLZ {exec kill -STOP [pid]}

        \001   {send_user "you typed a control-A\n";

                send "\001"

               }

        $      {send_user "The date is [exec date]."}

        \003   exit

        foo    {send_user "bar"}

        ~~

    }



string ¤È body ¤ÎÁȤǡ¢string ¤¬°ú¿ô¤È¤·¤Æʤ٤é¤ì¤¿½ç¤ËÈæ³Ó¤µ¤ì¤ë¡£ ÉôʬŪ¤Ë¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó¤Ï¡¢»Ä¤ê¤¬ÅþÃ夹¤ë¤Þ¤ÇÁ÷¤é¤ì¤ÆÍè¤Ê¤¤¡£ ²¿Ê¸»ú¤«¤µ¤é¤ËÂǤÁ¹þ¤Þ¤ì¤Æ¡¢¥Þ¥Ã¥Á¤¬²Äǽ¤Ë¤Ê¤ë¤È¡¢º£¤Î¥Þ¥Ã¥Á¤òȽÃǤ¹¤ë ¤¿¤á¤Ë¤À¤±»È¤ï¤ì¤Æ¾¤Î¥Þ¥Ã¥Á¤ò»Ï¤á¤ë¤³¤È¤Ï¤·¤Ê¤¤¡£¤½¤ì¤æ¤¨¡¢ÉôʬŪ¤Ë ¥Þ¥Ã¥Á¤·¤Æ¤¤¤ëʸ»úÎó¤Î¥Þ¥Ã¥Á¤¬´°Î»¤¹¤ë¤Î¤ÏÃÙ¤ì¤ë¤³¤È¤¬¤¢¤ë¡£ ÉôʬŪ¤Ë¤Ï¥Þ¥Ã¥Á¤¹¤ë¤¬ºÇ½ªÅª¤Ë¤Ï¥Þ¥Ã¥Á¤·¤Ê¤¤Ê¸»úÎó¤Î¾ì¹ç¤Ê¤É¤Ç¤¢¤ë¡£
¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥ï¥¤¥ë¥É¥«¡¼¥É¤ò´Þ¤Þ¤Ê¤¤¥Þ¥Ã¥Á¤Ï¡¢exact¤È¤Ê¤ë¡£ ( expect ¥³¥Þ¥ó¥É¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¥°¥í¥Ö¥¹¥¿¥¤¥ë¤Î¥Ñ¥¿¡¼¥ó¤òÍѤ¤¤ë¤Î¤È¤ÏÂоÈŪ¤Ë¡£) -ex ¥Õ¥é¥°¤Ï¡¢¥Ñ¥¿¡¼¥ó¤ò¥×¥í¥Æ¥¯¥È¤¹¤ë¤Î¤Ë»È¤¨¤ë¡£ interact ¥Õ¥é¥°¤¬¤½¤¦¤¹¤ë¤è¤¦¤Ë¡£ ¥Ñ¥¿¡¼¥ó¤¬"-"¤Ç»Ï¤Þ¤ë¾ì¹ç¡¢¤³¤ÎÊýË¡¤ÇÊݸî¤Ç¤­¤ë¡£ ("-"¤Ç»Ï¤Þ¤ëʸ»úÎó¤ÏÁ´¤Æ¾­Íè¤Î¥ª¥×¥·¥ç¥ó¤È¤·¤ÆͽÌ󤵤ì¤Æ¤¤¤ë¡£)
-re ¥Õ¥é¥°¤Ï¡¢Àµµ¬É½¸½¥¹¥¿¥¤¥ë¤Î¥Ñ¥¿¡¼¥ó¤È¤·¤Æʸ»úÎó¤ò²ò¼á¤¹¤ë¡£ ¤³¤Î¾ì¹ç¡¢¥Þ¥Ã¥Á¤·¤¿Éôʬʸ»úÎó¤Ï interact_out ¤ËÊݸ¤µ¤ì¤ë¡£ expect ¤¬¡¢¤½¤Î½ÐÎϤòÊÑ¿ô expect_out ¤ËÊݸ¤¹¤ë¤Î¤È»÷¤¿¤è¤¦¤Ê¤â¤Î¤Ç¤¢¤ë¡£ -indices ¥Õ¥é¥°¤âƱ¤¸¤è¤¦¤Ë¥µ¥Ý¡¼¥È¤µ¤ì¤ë¡£
¥Ñ¥¿¡¼¥ó eof ¤Ï¡¢end-of-file ¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ë¡£ Ê£¿ô¤Ëʬ¤«¤ì¤¿ eof ¥Ñ¥¿¡¼¥ó¤Ë¤Ï -output ¥Õ¥é¥°¤¬Â³¤¤¤Æ¤âÎɤ¤¡£¤½¤Î¾ì¹ç¡¢½ÐÎϤ¬½ñ¤«¤ì¤Æ¤¤¤ë´Ö¤Ë eof ¤¬¸¡½Ð¤µ¤ì¤ë¤È ¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ë¡£ eof ¤Î¥Ç¥Õ¥©¥ë¥È¥¢¥¯¥·¥ç¥ó¤Ï"return"¤Ç¤¢¤ë¡£ ¤½¤ì¤Ç¡¢ interact ¤Ï¡¢EOF ¤ò¸«¤Ä¤±¤ë¤ÈÉüµ¢¤¹¤ë¡£
timeout ¥Ñ¥¿¡¼¥ó¤Ï¡¢(ÉäÇɽ¸½¤µ¤ì¤¿)¥¿¥¤¥à¥¢¥¦¥È¤Ë¥Þ¥Ã¥Á¤·¡¢¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ë¡£ timeout ¥Ñ¥¿¡¼¥ó¤Ï¡¢ºÇ¸å¤Ë»Ø¼¨¤µ¤ì¤¿¥×¥í¥»¥¹¤ËŬÍѤµ¤ì¤ë¡£¥¿¥¤¥à¥¢¥¦¥È¤Ë¤Ï ¥Ç¥Õ¥©¥ë¥È¤ÎÃͤϤʤ¤¡£(expectÆâ¤Ç»È¤ï¤ì¤ë)Æüì¤ÊÊÑ¿ô"timeout"¤Ï¡¢ ¤³¤Î¥¿¥¤¥à¥¢¥¦¥È¤È´Ø·¸¤·¤Ê¤¤¡£
Î㤨¤Ð¡¢°Ê²¼¤Îµ­½Ò¤Ï°ì»þ´Ö°Ê¾å¥¿¥¤¥×¤·¤Ê¤«¤Ã¤¿¥æ¡¼¥¶¡¼¤ò¼«Æ°Åª¤Ë¥í¥°¥¢¥¦¥È ¤µ¤»¤ë¡£¤½¤ÎÁ°¤Ë¥·¥¹¥Æ¥à¤«¤éÉÑÈˤ˥á¥Ã¥»¡¼¥¸¤ò¼õ¤±¤È¤ë:



    interact -input $user_spawn_id timeout 3600 return -output \

        $spawn_id 



¥Ñ¥¿¡¼¥ó null ¤È nulls ¤Ï¡¢( remove_nulls ¥³¥Þ¥ó¥É¤òÄ̤·¤Æ)¡¢¥¢¥¹¥­¡¼¤Î 0 ¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ë¡£ glob ¤ä regexp ¤Ç 0 ¥Ð¥¤¥È¤Ë¥Þ¥Ã¥Á¤µ¤»¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£

¤³¤Î¥Ñ¥¿¡¼¥ó¤ÎÁ°¤Ë -iwrite ¥Õ¥é¥°¤ò¤Ä¤±¤ë¤È¡¢ ÊÑ¿ô interact_out(spawn_id) ¤Ë¥Ñ¥¿¡¼¥ó(¤¢¤ë¤¤¤Ïeof)¤Ë¥Þ¥Ã¥Á¤·¤¿ spawn_id ¤¬ÀßÄꤵ¤ì¤ë¡£

break ¤ä continue ¤È¤¤¤Ã¤¿¥¢¥¯¥·¥ç¥ó¤Ï¡¢À©¸æ¹½Â¤ (¤¹¤Ê¤ï¤Á¡¢ for ¤ä proc )¤ÎÃæ¤Ç¡¢Ä̾ïÄ̤ê¤ËÆ°¤¯¡£ ¤·¤«¤·¡¢ return ¤Ï¡¢interact ¤ò¸Æ½Ð¸µ¤ËÉüµ¢¤µ¤»¤ë¡£°ìÊý¡¢ inter_return ¤Ï¡¢ interact ¤ò¤½¤Î¸Æ¤Ó¤À¤·¸µÆâ¤ËÉüµ¢¤µ¤»¤ë¡£Î㤨¤Ð¡¢"proc foo" ¤Ï interact ¤ò¸Æ¤Ö¡£interact ¤¬¡¢¤µ¤é¤Ë¡¢ inter_return ¤ò¼Â¹Ô¤¹¤ë¤È proc foo ¤¬Éüµ¢¤¹¤ë¡£(¤³¤ì¤Ï¡¢ interact ¤¬¡¢ interpreter ¤ò¸Æ¤ó¤Ç return ¤È¥¿¥¤¥×¤¹¤ë¤È¡¢¤½¤Îinteract¤Ï·Ñ³¤¹¤ë¤¬¡¢ inter_return ¤¹¤ë¤È¡¢¤½¤Î¸Æ½Ð¸µ¤ËÉüµ¢¤·¤Æ¤·¤Þ¤¦¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£)

interact ¤Î´Ö raw ¥â¡¼¥É¤¬»ÈÍѤµ¤ì¤ë¤Î¤Ç¡¢Á´¤Æ¤Îʸ»ú¤¬¸½¥×¥í¥»¥¹¤ËÅϤµ¤ì¤ë¡£ ¸½¥×¥í¥»¥¹¤¬¥¸¥ç¥Ö¥³¥ó¥È¥í¡¼¥ë¥·¥°¥Ê¥ë¤òÊá¤Þ¤¨¤Ê¤±¤ì¤Ð¡¢ ¥¹¥È¥Ã¥×¥·¥°¥Ê¥ë(¥Ç¥Õ¥©¥ë¥È^Z)¤ÇÄä»ß¤¹¤ë¡£ºÆ¥¹¥¿¡¼¥È¤¹¤ë¤Ë¤Ï¡¢ À©¸æ¥·¥°¥Ê¥ë¤òÁ÷¤ë¡£("kill -CONT <pid>"¤È¤«ÂǤäÆ)¡£ ËÜÅö¤Ë SIGSTOP ¤ò¥×¥í¥»¥¹¤ËÁ÷¤ê¤¿¤¤¤Ê¤é¡¢csh ¤ò spawn ¤·¤Æ¤½¤Î¾å¤Ç ¥×¥í¥»¥¹¤òµ¯Æ°¤¹¤ë¤³¤È¡£ ¤½¤¦¤Ç¤Ê¤¯¤Æ¡¢ Expect ¤½¤Î¤â¤Î¤Ë SIGSTOP ¤òÁ÷¤ê¤¿¤¤¤Ê¤é¡¢¥¤¥ó¥¿¥×¥ê¥¿¤ò¸Æ¤Ó½Ð¤·¤Æ (ÉáÄ̤ϥ¨¥¹¥±¡¼¥×ʸ»ú)¡¢¤½¤Î¸å ^Z ¤òÂǤĤ³¤È¡£
string body¤Î¥Ú¥¢¤Ï¡¢¥¤¥ó¥¿¥×¥ê¥¿¤ËÆþ¤Ã¤Æ¥³¥Þ¥ó¥É¤òÂÐÏÃŪ¤Ë¼Â¹Ô¤¹¤ë¤Î¤ò Èò¤±¤ë¤³¤È¤ò´Êñ¤Ë½ñ¤¯¤Î¤Ë»È¤ï¤ì¤ë¡£ Á°¤ÎüËö¥â¡¼¥É¤¬¡¢¤½¤Î body ¤ò¼Â¹Ô¤¹¤ë´Ö»ÈÍѤµ¤ì¤ë¡£
¼Â¹Ô®ÅÙ¤ò¾å¤²¤ë¤Ë¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¥¢¥¯¥·¥ç¥ó¤¬ raw ¥â¡¼¥É¤ÇÆ°¤¯¤è¤¦¤Ë ¤¹¤ë¡£ -reset ¥Õ¥é¥°¤Ï¡¢Ã¼Ëö¤Î»ý¤Ã¤Æ¤¤¤ë¥â¡¼¥É¤ò¥ê¥»¥Ã¥È¤¹¤ë¡£¤½¤¦¤·¤Ê¤±¤ì¤Ð¡¢ ¤½¤ÎÁ°¤Ë¹Ô¤Ê¤Ã¤¿ interact ¥³¥Þ¥ó¥É¤ÎüËö¥â¡¼¥É(cooked ¥â¡¼¥É¤È¤«)¤¬ÊÝ»ý¤µ¤ì¤ë¡£ ¥â¡¼¥É¤¬ÀÚ¤êÂؤï¤Ã¤¿»þ¤Ë¡¢¤½¤ì¤Þ¤ÇÂǤäƤ¤¤¿Ê¸»ú¤¬¾Ã¤¨¤Æ¤·¤Þ¤¦¤³¤È¤¬ ¤¢¤ë¤Î¤ÇÃí°Õ¤¹¤ë¤³¤È¡£(¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤Ï¡¢¤½¤¦¤¤¤¦ÉÔ¹¬¤Ê»ÅÍͤò¤·¤¿ üËö¥É¥é¥¤¥Ð¤¬Æ°¤¤¤Æ¤¤¤ë¡£) -reset ¤ò»È¤¦¤Î¤Ï¡¢¥¢¥¯¥·¥ç¥ó¤¬ cooked ¥â¡¼¥É¤Ç¤·¤«Æ°¤«¤Ê¤¤¾ì¹ç¤À¤±¤Ç¤¢¤ë¡£
-echo ¥Õ¥é¥°¤Ï¡¢°ìʸ»ú¤Å¤Ä¥Ñ¥¿¡¼¥ó¤Ë¥Þ¥Ã¥Á¤¹¤ëʸ»ú¤òÊÖ¤¹¡£¤³¤ì¤Ï¡¢ ¥æ¡¼¥¶¡¼¤¬ÂǤÄʸ»ú¤ËÉôʬŪ¤Ë¥Þ¥Ã¥Á¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¾ì¹ç¤ËÍ­¸ú¤Ç¤¢¤ë¡£
¥Ñ¥¿¡¼¥ó¤Ï¥¨¥³¡¼¤µ¤ì¤¿¤¬¥Þ¥Ã¥Á¤Ë¤Ï¼ºÇÔ¤·¤¿¾ì¹ç¡¢Ê¸»úÎó¤Ï¡¢spawn ¤µ¤ì¤¿ ¥×¥í¥»¥¹¤ËÁ÷¤é¤ì¤ë¡£¤½¤ì¤«¤é¡¢spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤¬Ê¸»úÎó¤òɽ¼¨¤·¡¢ ¥æ¡¼¥¶¡¼¤Ïʸ»úÎó¤òÆóÅÙ¸«¤ë¡£ -echo ¤Ï¡¢¥æ¡¼¥¶¡¼¤¬¥Ñ¥¿¡¼¥ó¤ò´°À®¤µ¤»¤Æ¤¯¤ì¤½¤¦¤â¤Ê¤¤¾ì¹ç¤Ë¤À¤±Í­¸ú¤Ç¤¢¤í¤¦¡£ Î㤨¤Ð¡¢°Ê²¼¤Ï rftp(¥ê¥«¡¼¥·¥Ö ftp ¥¹¥¯¥ê¥×¥È)¤«¤é¤ÎÈ´¿è¤À¤¬¡¢¥æ¡¼¥¶¡¼¤¬ ~g, ~p, ~l ¤òÂǤĤȥ«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤«¤éºÆµ¢Åª(¥ê¥«¡¼¥·¥Ö)¤Ë get, put, list ¤¹¤ë¡£Ä̾ï¤Î ftp ¤Ç¤Ï¤³¤ì¤é¤ÎÁàºî¤¬¤Ç¤­¤Ê¤¤¡£´Ö°ã¤Ã¤Æ ~ ¤ò ÂǤĤ«¡¢~ ¤Î¸å¤ò´Ö°ã¤¨¤¿¾ì¹ç¡¢¤½¤Îʸ»úÎó¤ò̵»ë¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£



    interact {

        -echo ~g {getcurdirectory 1}

        -echo ~l {getcurdirectory 0}

        -echo ~p {putcurdirectory}

    }



-nobuffer ¥Õ¥é¥°¤Ï¡¢Ê¸»ú¤¬Æɤޤì¤ëÅ٤ˡ¢¤½¤Îʸ»ú¤ò¥Þ¥Ã¥Á¤ØÁ÷¤ë¡£

¤³¤Î¥Õ¥é¥°¤Ï¡¢¥Ñ¥¿¡¼¥ó¤ò¥¨¥³¡¼¥Ð¥Ã¥¯¤¹¤ë»þ¤ËÍ­¸ú¤Ç¤¢¤ë¡£ Î㤨¤Ð¡¢°Ê²¼¤Ï狼¤¬(¥Ø¥¤¥º¥â¥Ç¥à¤ò)¥À¥¤¥¢¥ë¤¹¤ë¤Î¤ò´Æ»ë¤¹¤ë¤Î¤Ë »È¤ï¤ì¤ë¡£"atd"¤¬¸«¤¨¤ëÅ٤˥¹¥¯¥ê¥×¥È¤¬»Ä¤ê¤Î¥é¥¤¥ó¤ò¥í¥°¤¹¤ë¡£




    proc lognumber {} {

        interact -nobuffer -re "(.*)\r" return

        puts $log "[exec date]: dialed $interact_out(1,string)"

    }



    interact -nobuffer "atd" lognumber



interact ¤Î´Ö¡¢Á°¤Ë»È¤Ã¤¿ log_user ¤Ï̵»ë¤µ¤ì¤ë¡£Æäˡ¢ interact ¤Ï¡¢¤½¤Î½ÐÎϤòµ­Ï¿¤µ¤ì¤ë(ɸ½à½ÐÎϤËÁ÷¤é¤ì¤ë)¡£ ¤È¤¤¤¦¤Î¤Ï¡¢¥æ¡¼¥¶¡¼¤Ï¥¨¥³¡¼¥Ð¥Ã¥¯¤Î¤Ê¤¤¾õÂ֤ǥ­¡¼¤òÂǤÁ¤¿¤¯¤Ï¤Ê¤¤ ¤À¤í¤¦¤È¹Í¤¨¤ë¤«¤é¤Ç¤¢¤ë¡£
-o ¥Õ¥é¥°¤Ï¡¢¸½¥×¥í¥»¥¹¤Î½ÐÎÏ¤Ë key body ¥Ú¥¢¤Î key ¤ò·ë¤Ó¤Ä¤±¤ë¡£ ¤³¤ó¤Ê¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£Î㤨¤Ð¡¢telnet ¥»¥Ã¥·¥ç¥óÃæ¤Ë˾¤Þ¤Ê¤¤Ê¸»ú¤ò Á÷¤Ã¤Æ¤¯¤ë¥Û¥¹¥È¤ò°·¤¦¾ì¹ç¤Ç¤¢¤ë¡£
¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ interact ¤Ï¡¢¥æ¡¼¥¶¡¼¤¬ Expect ¥×¥í¥»¥¹¼«¿È¤Îɸ½àÆþÎϤ˽ñ¤­¹þ¤ß¡¢É¸½à½ÐÎϤò¸«¤Æ¤¤¤ë¤È»×¤Ã¤Æ¤¤¤ë¡£ -u ¥Õ¥é¥°("user"¤Îu)¤Ï interact ¤Ë¡¢°ú¿ô¤ÇÉÕ¤±¤é¤ì¤¿Ì¾Á°(spawned id ¤Ç¤¢¤ë)¤Î¥×¥í¥»¥¹¤ò¥æ¡¼¥¶¡¼¤È¤·¤Æ °·¤¦¡£
¤³¤ì¤Ë¤è¤ê¡¢ÊѤʥ롼¥×¤Ê¤·¤Ë2¤Ä¤Î̵´Ø·¸¤Ê¥×¥í¥»¥¹¤ò·ë¹ç¤µ¤»¤ë¤³¤È¤¬ ¤Ç¤­¤ë¡£¥Ç¥Ð¥Ã¥°¤¹¤ë»þ¤Î½õ¤±¤È¤·¤Æ¡¢Expect ¤Ï¾ï¤Ë¿ÇÃÇ·ë²Ì¤ò stderr ¤ØÁ÷¤ë¡£(¤¢¤ë¼ï¤Î¥í¥°¤È¥Ç¥Ð¥Ã¥°¾ðÊó¤Ï stdout ¤ËÁ÷¤é¤ì¤ë)¡£ Ʊ¤¸Íýͳ¤Ç¡¢ interpreter ¥³¥Þ¥ó¥É¤Ï¡¢stdin ¤«¤é¥Ç¡¼¥¿¤òÆɤࡣ
Î㤨¤Ð¡¢°Ê²¼¤ÎÃÇÊÒ¤Ï¥í¥°¥¤¥ó¥×¥í¥»¥¹¤òºî¤ë¡£¤½¤·¤Æ¡¢(ɽ¼¨¤µ¤ì¤Ê¤¤) ¥æ¡¼¥¶¡¼¤Ë¥À¥¤¥¢¥ë¤·¡¢Î¾Êý¤ÎÀܳ¤ò¹Ô¤Ê¤¦¡£ ¤â¤Á¤í¤ó¡¢login¤ò¤É¤ó¤Ê¥×¥í¥»¥¹¤ËÊѤ¨¤Æ¤âÎɤ¤¡£Î㤨¤Ð¡¢¥·¥§¥ë¤Ê¤é¡¢¥¢ ¥«¥¦¥ó¥È¤È¥Ñ¥¹¥ï¡¼¥É¤òÍ¿¤¨¤Ê¤¯¤Æ¤â¥æ¡¼¥¶¡¼¤¬µ¯Æ°¤Ç¤­¤ë¡£



    spawn login

    set login $spawn_id

    spawn tip modem

    # dial back out to user

    # connect user to login

    interact -u $login



Ê£¿ô¤Î¥×¥í¥»¥¹¤Ø¤Î½ÐÎϤò¹Ô¤Ê¤¦¤¿¤á¡¢ -output ¥Õ¥é¥°¤òÁ°¤Ë¤Ä¤±¤¿³Æ spawn id ¤Î¥»¥Ã¥È¤¬¥ê¥¹¥È¤µ¤ì¤ë¡£ ½ÐÎÏ spawn id ¤ÎÁȤؤÎÆþÎϤϡ¢ -input ¥Õ¥é¥°¤Ë¤è¤Ã¤Æ·èÄꤵ¤ì¤ë¡£ ( -input ¤È -output ¥Õ¥é¥°¤ÏξÊý¤È¤â expect ¥³¥Þ¥ó¥É¤Î -i ¥Õ¥é¥°¤ÈƱ¤¸½ñ¼°¤Ç¤¢¤ë¡£( interact Æâ¤Î any_spawn_id ¤Ï°ÕÌ£¤¬¤Ê¤¤ÅÀ¤ò½ü¤¯¡£) °Ê²¼¤Î¥Õ¥é¥°¤Èʸ»úÎó(¤¢¤ë¤¤¤Ï¥Ñ¥¿¡¼¥ó)¤ÏÁ´¤Æ¡¢Ê̤Π-input ¥Õ¥é¥°¤¬¸½¤ì¤ë¤Þ¤Ç ¤³¤ÎÆþÎϤòŬÍѤ¹¤ë¡£ -input ¤¬¸½¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¡¢ -output ¤Ï "-input $user_spawn_id -output" ¤ò¹Ô¤Ê¤¦¡£ ( -input ¤ò»ý¤¿¤Ê¤¤¥Ñ¥¿¡¼¥ó¤âƱÍͤǤ¢¤ë¡£) -input ¤¬°ì¤Ä¤À¤±»Ø¼¨¤µ¤ì¤ë¤È¡¢$user_spawn_id ¤Ï¤½¤ÎÃͤÇÃÖ¤­´¹¤ï¤ë¡£ Æó¤Ä¤á¤Î -input ¤¬»Ø¼¨¤µ¤ì¤ë¤È¡¢$spawn_id ¤¬ÃÖ¤­´¹¤ï¤ë¡£ °Ê¹ß¤Î -input ¥Õ¥é¥°¤â»ØÄê¤Ç¤­¤ë¡£

2¤Ä¤ÎÆþÎÏ¥×¥í¥»¥¹¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç $spawn_id ¤È $user_spawn_id ¤Ë½ÐÎϤµ¤ì¤ë¡£ ¤â¤·¡¢ -input ¥Õ¥é¥°¤¬ -output ¥Õ¥é¥°¤Ê¤·¤Ç»ØÄꤵ¤ì¤¿¾ì¹ç¡¢¥×¥í¥»¥¹¤«¤é¤Îʸ»ú¤Ï¼Î¤Æ¤é¤ì¤ë¡£

-i ¥Õ¥é¥°¤Ï¡¢¸½ºß¤Î spawn_id ¤ò½ñ¤­´¹¤¨¤ë¡£ ¤¿¤À¤·¡¢ -input ¤Þ¤¿¤Ï -output ¥Õ¥é¥°¤¬»È¤ï¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ç¤¢¤ë¡£-i ¥Õ¥é¥°¤Ï -o ¥Õ¥é¥°¤ò´Þ¤à¡£

´ÖÀÜ spawn id ¤ò»È¤Ã¤Æ²ñÏ䷤Ƥ¤¤ë¥×¥í¥»¥¹¤òÀÚÂؤ¨¤ë¤³¤È¤¬²Äǽ¤Ç¤¢¤ë¡£ (´ÖÀÜ spawn id ¤Ï¡¢expect ¥³¥Þ¥ó¥É¤Î¹à¤ÇÀâÌÀ¤·¤¿) ´ÖÀÜ spawn id ¤Ï¡¢-i, -u, -input, -output ¥Õ¥é¥°¤Ç»ØÄê¤Ç¤­¤ë¡£

interpreter [args]
¤Ï¡¢¥æ¡¼¥¶¡¼¤Ë Expect ¤È Tcl ¥³¥Þ¥ó¥É¤Î¤¿¤á¤Î¥×¥í¥ó¥×¥È¤òɽ¼¨¤¹¤ë¡£ ³Æ¥³¥Þ¥ó¥É¤Î·ë²Ì¤¬É½¼¨¤µ¤ì¤ë¡£
break ¤ä continue ¤ÏÀ©¸æ¹½Â¤(¤¹¤Ê¤ï¤Á¡¢ for proc )¤Ç¡¢Ä̾ïÄ̤ê¤ËÆ°¤¯¡£ ¤·¤«¤·¡¢ return ¤Ï¡¢¸Æ½Ð¸µ¤Ø¤ÎÉüµ¢¤ò¹Ô¤Ê¤¦¤Î¤ËÂФ·¡¢ inter_return ¤Ï interpreter ¤ò¡¢¸Æ½Ð¸µ¤òÉüµ¢¤µ¤»¤ë¡£¤¿¤È¤¨¤Ð¡¢ "proc foo" ¤Ï¡¢ interpreter ¤ò¸Æ¤Ó¡¢ inter_return ¤ò¼Â¹Ô¤· proc foo ¤¬Éüµ¢¤¹¤ë¡£ ¾¤Î¥³¥Þ¥ó¥É¤Ï interpreter ¤Ë¿·¤·¤¤¥³¥Þ¥ó¥É¤Î¤¿¤á¤Î¥×¥í¥ó¥×¥È¤òɽ¼¨¤·Â³¤±¤ë¡£
¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥×¥í¥ó¥×¥È¤Ï 2 ¤Ä¤ÎÀ°¿ô¤ò´Þ¤ó¤Ç¤¤¤ë¡£ ºÇ½é¤Î¿ô¤Ïɾ²Á¥¹¥¿¥Ã¥¯¤Î¿¼¤µ(¤Ä¤Þ¤ê¡¢²¿²ó Tcl_Eval ¤¬¸Æ¤Ð¤ì¤¿¤«) 2ÈÖ¤á¤Î¿ô¤Ï¡¢Tcl ¥Ò¥¹¥È¥ê¼±ÊÌÈÖ¹æ¤Ç¤¢¤ë¡£¥×¥í¥ó¥×¥È¤Ï "prompt1"¤È¸Æ¤Ð¤ì¤ë¥×¥í¥·¥¸¥ã¤òÄêµÁ¤¹¤ë¤³¤È¤ÇÀßÄê¤Ç¤­¤ë¡£ ¤³¤Î¥×¥í¥·¥¸¥ã¤Îµ¢¤êÃͤ¬¼¡¤Î¥×¥í¥ó¥×¥È¤È¤Ê¤ë¡£ µ­½Ò¤Ë³«¤­¥¯¥ª¡¼¥È¡¢³ç¸Ì¡¢¥Ö¥ì¡¼¥¹¡¢¥Ö¥é¥±¥Ã¥È¤¬¤¢¤ë¤È¡¢¼¡¤Î¹Ô¤Ë¤Ï Âè 2 ¥×¥í¥ó¥×¥È¤¬¸½¤ì¤ë(¥Ç¥Õ¥©¥ë¥È¤Ï "+> ")¡£Âè 2 ¥×¥í¥ó¥×¥È¤Ï "prompt2"¤È¸Æ¤Ð¤ì¤ë¥×¥í¥·¥¸¥ã¤òÄêµÁ¤¹¤ë¤³¤È¤ÇÀßÄê¤Ç¤­¤ë¡£
interpreter ¤Î´Ö¤Ï¡¢¸Æ½Ð¸µ¤¬ raw ¥â¡¼¥É¤Ç¤¢¤Ã¤¿¤È¤·¤Æ¤â¡¢cooked ¥â¡¼¥É¤¬»È¤ï¤ì¤ë¡£
stdin ¤¬ÊĤ¸¤é¤ì¤ë¤È¡¢ interpreter ¤Ï -eof ¥Õ¥é¥°¤¬»È¤ï¤ì¤Æ¤¤¤Ê¤¤¸Â¤êÉüµ¢¤¹¤ë¡£ »È¤ï¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï°ú¤­Â³¤¯°ú¿ô¤ò¼Â¹Ô¤¹¤ë¡£
log_file [args] [[-a] file]
¥Õ¥¡¥¤¥ë̾¤¬Í¿¤¨¤é¤ì¤ë¤È¡¢ log_file ¤Ï¡¢(¸½»þÅÀ¤«¤é¤Î)¥»¥Ã¥·¥ç¥ó¤Î¥í¥°¤ò¤½¤Î¥Õ¥¡¥¤¥ë¤ËºÎ¼è¤¹¤ë¡£ °ú¿ô¤¬¤Ê¤±¤ì¤Ð¡¢ log_file ¤Ïµ­Ï¿¤ò¤ä¤á¤ë¡£»È¤Ã¤Æ¤¤¤¿¥í¥°¥Õ¥¡¥¤¥ë¤Ï¥¯¥í¡¼¥º¤µ¤ì¤ë¡£

¥Õ¥¡¥¤¥ë̾¤ÎÂå¤ï¤ê¤Ë¡¢Tcl ¥Õ¥¡¥¤¥ë¼±Ê̻Ҥò»ØÄꤹ¤ë¤È¡¢ -open ¤ä -leaveopen ¥Õ¥é¥°¤¬»È¤¨¤ë¡£ spawn ¥³¥Þ¥ó¥É¤ÈƱÍͤÀ(¤è¤ê¾Ü¤·¤¯¤Ï¡¢ spawn ¤ò»²¾È)

-a ¥Õ¥é¥°¤Ï¡¢ log_user ¥³¥Þ¥ó¥É¤Ë¤è¤Ã¤ÆÍ޻ߤµ¤ì¤¿¥í¥°¤Ë½ÐÎϤò¶¯À©¤¹¤ë¤â¤Î¤Ç¤¢¤ë¡£

¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ log_file ¥³¥Þ¥ó¥É¤Ï¸Å¤¤µ­Ï¿¤ò¾Ã¤·¤Æ½ñ¤­Ä¾¤·¤¿¤ê¤»¤º¤Ë Äɵ­ ¤¹¤ë¡£ ¥í¥°¥ª¥Õ¤äÊ£¿ô¤Î¥í¥°¤ò½ñ¤¯»þ¤ËÅԹ礬Îɤ¤¤è¤¦¤Ë¡£ ¥Õ¥¡¥¤¥ë¤ò¾Ã¤·¤Æ½ñ¤­Ä¾¤¹»þ¤Ï -noappend ¥Õ¥é¥°¤ò»È¤¦¡£

-info ¥Õ¥é¥°¤Ï¡¢ºÇ¸å¤Ë¥í¥°¤·¤¿ÆâÍƤòÊÖ¤¹(ºÇ¸å¤¬-info¥Õ¥é¥°ÉÕ¤­¤À¤Ã¤¿¤é¡¢ ¤½¤ÎÁ°¤ÎÆâÍÆ)¡£

log_user -info|0|1
¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢send/expect ¥À¥¤¥¢¥í¥°¤Ïɸ½à½ÐÎÏ¤Ë¥í¥®¥ó¥°¤µ¤ì¤ë¡£ (³«¤¤¤Æ¤¤¤ì¤Ð¥í¥°¥Õ¥¡¥¤¥ë¤Ë¤â¥í¥®¥ó¥°¤µ¤ì¤ë¡£) "log_user 0"¤È¤¹¤ë¤È¡¢É¸½à½ÐÎÏ¤Ø¤Î¥í¥®¥ó¥°¤¬Í޻ߤµ¤ì¤ë¡£ "log_user 1"¤È¤¹¤ë¤È¡¢Éüµì¤¹¤ë¡£¥í¥°¥Õ¥¡¥¤¥ë¤Ø¤Îµ­Ï¿¤Ë¤Ä¤¤¤Æ¤Ï Êѹ¹¤Ï¤Ê¤¤¡£

-info ¥Õ¥é¥°¤Ï¡¢ºÇ¸å¤Ë¥í¥°¤·¤¿ÆâÍƤòÊÖ¤¹(ºÇ¸å¤¬ -info ¥Õ¥é¥°ÉÕ¤­¤À¤Ã¤¿¤é¡¢ ¤½¤ÎÁ°¤ÎÆâÍÆ)¡£

match_max [-d] [-i spawn_id] [size]
¤Ï¡¢¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º¤ò(¥Ð¥¤¥Èñ°Ì¤Ç)ÄêµÁ¤¹¤ë¡£¤³¤Î¥Ð¥Ã¥Õ¥¡¤Ï¡¢ expect ¤ÎÆâÉô¤Ç»È¤ï¤ì¤ë¡£ °ú¿ô size ¤¬¤Ê¤¤¤È¡¢¸½ºß¤Î¥µ¥¤¥º¤òÉüµ¢¤¹¤ë¡£
-d ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢¥Ç¥Õ¥©¥ë¥È¥µ¥¤¥º¤¬ÀßÄꤵ¤ì¤ë¡£(½é´ü¾õÂ֤Π¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï 2000¡£) -i ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢Ì¾Á°¤Ä¤­ spawn id ¤ËÂФ·¤Æ¥µ¥¤¥º¤¬ÀßÄꤵ¤ì¤ë¡£ »ØÄꤷ¤Ê¤±¤ì¤Ð¡¢¥«¥ì¥ó¥È¥×¥í¥»¥¹¤ËÂФ·¤ÆÀßÄꤵ¤ì¤ë¡£
overlay [-# spawn_id] [-# spawn_id] [...] program [args]
¤Ï¡¢ program args ¤ò¸½ºß¤Î Expect ¥×¥í¥°¥é¥à¾å¤Ç¼Â¹Ô¤¹¤ë¡£¸½ºß¤Î Expect ¥×¥í¥°¥é¥à¤Ï½ªÎ»¤¹¤ë¡£ ¤¿¤À¤Î¥Ï¥¤¥Õ¥ó¤¬°ú¿ô¤Ë»ØÄꤵ¤ì¤ë¤È¡¢¥³¥Þ¥ó¥É̾¤ÎÁ°¤Ë¥Ï¥¤¥Õ¥ó¤ò¤Ä¤±¤Æ ¥í¥°¥¤¥ó¥·¥§¥ë¤È¤·¤Æ°·¤¦¡£ Á´¤Æ¤Î¥¯¥í¡¼¥ºÃæ¤Î spawn_id ¤Ï¡¢°ú¿ô¤Ë»È¤ï¤ì¤¿Ê¸»úÎó¤òÂԤġ£
Spawn_id ¤Ï¡¢¿·¤·¤¤¥×¥í¥°¥é¥à¤Ë·Ñ¾µ¤µ¤»¤ë¤¿¤á¤Î¥Õ¥¡¥¤¥ë ID ¤Ë ¥Þ¥Ã¥×¤µ¤ì¤ë¡£Î㤨¤Ð¡¢°Ê²¼¤Î¹Ô¤Ï¥Á¥§¥¹¤ò¹Ô¤Ê¤¤¡¢chess master ¤È¤¤¤¦¸½¥×¥í¥»¥¹¤ËÀ©¸æ¤µ¤»¤ë¡£



    overlay -0 $spawn_id -1 $spawn_id -2 $spawn_id chess



¤³¤ì¤Ï¡¢ "interact -u" ¤È¤¹¤ë¤è¤ê¤â¸ú²ÌŪ¤Ç¤¢¤ë¡£¤·¤«¤·¡¢ Expect ¥×¥í¥»¥¹¤¬À©¸æ¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç¥×¥í¥°¥é¥àǽÎϤ¬µ¾À·¤È¤Ê¤ë¡£
À©¸æ¤µ¤ì¤Ê¤¤Ã¼Ëö¤¬¤Ç¤­¤Æ¤·¤Þ¤¦¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£¤½¤ì¤Ç¡¢ disconnect ¤¹¤ë¤«É¸½àÆþÎϤò¥ê¥Þ¥Ã¥×¤¹¤ë¤È¥¸¥ç¥ÖÀ©¸æ¥×¥í¥°¥é¥à (¥·¥§¥ë¡¢¥í¥°¥¤¥ó¤Ê¤É)¤¬Àµ¤·¤¯µ¡Ç½¤·¤Ê¤¤¡£
parity [-d] [-i spawn_id] [value]
¤Ï¡¢spawn id¤Î½ÐÎϤ«¤é¥Ñ¥ê¥Æ¥£¤òÊÝ»ý¤¹¤ë¤«¼è¤ê½ü¤¯¤«¤òÀßÄꤹ¤ë¡£ value ¤¬ 0 ¤Ç¤¢¤ì¤Ð¡¢¥Ñ¥ê¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£ ¤½¤ì°Ê³°¤Î¾ì¹ç¡¢¼è¤ê½ü¤«¤ì¤Ê¤¤¡£ value ¤¬»ØÄꤵ¤ì¤Ê¤¤¾ì¹ç¡¢¸½ºß¤ÎÃͤ¬Éüµ¢¤¹¤ë¡£
-d ¥Õ¥é¥°¤Ï¡¢¥Ñ¥ê¥Æ¥£¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤòÀßÄꤹ¤ë¡£(¥¤¥Ë¥·¥ã¥ë»þ¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï 1 ¤Ç¤¢¤ë¡£¤¹¤Ê¤ï¤Á¡¢¥Ñ¥ê¥Æ¥£¤¬¼è¤ê½ü¤«¤ì¤ë¡£) -i ¥Õ¥é¥°¤ò»Ø¼¨¤¹¤ë¤È¡¢¥Ñ¥ê¥Æ¥£¤ÎÃͤ¬°ú¿ô¤Î̾Á°¤Ä¤­¤Î spawn id ¤ËÂФ·¤Æ ÀßÄꤵ¤ì¤ë¡£°ú¿ô¤¬¤Ê¤±¤ì¤Ð¸½ºß¤Î¥×¥í¥»¥¹¤ËÂФ·¤ÆÀßÄꤵ¤ì¤ë¡£
remove_nulls [-d] [-i spawn_id] [value]
¤Ï¡¢Á°¤Ë¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤·¤¿¤¢¤ë¤¤¤Ï expect_out ¤« interact_out ¤ËÊݸ¤µ¤ì¤Æ¤¤¤ë spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤Î½ÐÎϤ«¤é¥Ì¥ë¤òÊÝ»ý¤¹¤ë¤«¼è¤ê½ü¤¯¤«¤ò ÀßÄꤹ¤ë¡£ value ¤¬ 1 ¤Ê¤é¡¢¥Ì¥ë¤Ï¼è¤ê½ü¤«¤ì¤ë¡£¤â¤·¡¢ value ¤¬ 0 ¤Ê¤é¡¢¥Ì¥ë¤Ï¼è¤ê½ü¤«¤ì¤ë¡£ value ¤¬¤Ê¤±¤ì¤Ð¡¢¸½ºß¤ÎÃͤ¬Éüµ¢¤¹¤ë¡£
-d ¥Õ¥é¥°¤Ï¡¢¥Ç¥Õ¥©¥ë¥ÈÃͤòÀßÄꤹ¤ë¡£(¥¤¥Ë¥·¥ã¥ë¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤϡ¢ 1 ¤Ç¤¢¤ë¡£¤½¤ì¤æ¤¨¡¢¥Ì¥ë¤Ï¼è¤ê½ü¤«¤ì¤ë¡£) -i ¥Õ¥é¥°¤Ï¡¢Ì¾Á°¤Ä¤­¤Î spawn id ¤ËÂФ·¤ÆÃͤòÀßÄꤹ¤ë¡£¤Ê¤±¤ì¤Ð¡¢ ¸½¥×¥í¥»¥¹¤ËÂФ·¤ÆÀßÄꤹ¤ë¡£
¥Ì¥ë¤ò¼è¤ê½ü¤¯¤«¤É¤¦¤«¤Ë¤è¤é¤º¡¢ Expect ¤Ï¡¢¥í¥°¤Èɸ½à½ÐÎϤˤϥ̥뤬µ­Ï¿¤µ¤ì¤ë¡£
send [-flags] string
string ¤ò¸½¥×¥í¥»¥¹¤ËÁ÷¤ë¡£ Î㤨¤Ð¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É:



    send "hello world\r"



¤Ï¡¢Ê¸»ú h e l l o <blank> w o r l d <return> ¤ò¸½ºß¤Î¥×¥í¥»¥¹¤Ë Á÷¤ë¡£ (Tcl ¤Ï¡¢printf ¤Ë»÷¤¿¥³¥Þ¥ó¥É ( format ¤È¸Æ¤Ð¤ì¤ë )¤ò»ý¤Ã¤Æ¤¤¤Æ¡¢Ê£»¨¤Êʸ»úÎó¤òÁȤßΩ¤Æ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£)
ʸ»ú¤Ïľ¤Á¤ËÁ÷¤é¤ì¤ë¡£¤¿¤À¤·¡¢ÆþÎϤ˥饤¥ó¥Ð¥Ã¥Õ¥¡¤Î¤¢¤ë¥×¥í¥°¥é¥à¤Ç¤Ï¡¢ ¥ê¥¿¡¼¥ó¥³¡¼¥É¤¬Á÷¤é¤ì¤ë¤Þ¤Çʸ»ú¤¬Æɤޤì¤Ê¤¤¡£¥ê¥¿¡¼¥ó¥³¡¼¥É¤Ï¡¢ "\r"¤Èɽµ­¤¹¤ë¡£
-- ¥Õ¥é¥°¤Ï¡¢Â³¤¯°ú¿ô¤ò¥Õ¥é¥°¤È²ò¼á¤»¤ºÊ¸»úÎó¤È¤·¤Æ²ò¼á¤µ¤ì¤ë¡£ Á´ÂΤȤ·¤Æ¥Õ¥é¥°¤Ë¸«¤¨¤Ê¤¯¤Æ¤â"--"¤¬Á°¤Ë¤Ä¤¤¤¿Ê¸»úÎó¤Ï¥Õ¥é¥°¤È¤·¤Æ °·¤ï¤ì¤Æ¤·¤Þ¤¦¡£¤³¤Î¥Õ¥é¥°¤Ï½èÍý¤µ¤ì¤Æ¤¤¤Ê¤¤Ê¸»úÎ󤬥ե饰¤È¤·¤Æ °·¤ï¤ì¤ë¤Î¤òËɤ°¡£ ("-"¤Ç»Ï¤Þ¤ëʸ»ú¤ÏÁ´¤Æ¾­Íè¤Î¥ª¥×¥·¥ç¥ó¤È¤·¤ÆͽÌ󤵤ì¤Æ¤¤¤ë¡£)
-i ¥Õ¥é¥°¤Ï¡¢Ì¾Á°¤Ä¤­¤Î spawn_id ¤Ëʸ»úÎó¤òÁ÷¤ë¤³¤È¤òÀë¸À¤¹¤ë¡£ ¤½¤Î spawn_id ¤¬ user_spawn_id ¤Ç¤¢¤ì¤Ð¡¢Ã¼Ëö¤Ïraw ¥â¡¼¥É¤ËÆþ¤ê¡¢Ê¸»úÎóÃæ¤Î²þ¹Ô¤¬Éüµ¢²þ¹Ô¥·¡¼¥±¥ó¥¹¤Ë ÊÑ´¹¤µ¤ì¤ë¡£¤½¤ì¤Ç¡¢³°¤«¤é¤Ï üËö¤¬ cooked ¥â¡¼¥É¤È¤Ê¤Ã¤Æ¤¤¤ë¤è¤¦¤Ë ¸«¤¨¤ë¡£ -raw ¥Õ¥é¥°¤Ï¡¢¤³¤ÎÊÑ´¹¤òÍ޻ߤ¹¤ë¡£
-null ¥Õ¥é¥°¤Ï¡¢¥Ì¥ëʸ»ú¤òÁ÷¤ë(0 ¥Ð¥¤¥È)¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥Ì¥ëʸ»ú¤ò 1¤ÄÁ÷¤ë¡£ -null ¤Ë³¤¯À°¿ô¤Ï¥Ì¥ëʸ»ú¤ò¤¤¤¯¤ÄÁ÷¤ë¤«¤ò»Ø¼¨¤¹¤ë¡£
-break ¥Õ¥é¥°¤Ï¡¢¥Ö¥ì¡¼¥¯¾õÂÖ¤òºî¤ë¡£spawn id ¤¬"spawn -open"¤Ç»Ø¼¨¤·¤¿ tty ¥Ç¥Ð¥¤¥¹¤ò»²¾È¤¹¤ë¾ì¹ç¤Î¤ß°ÕÌ£¤¬¤¢¤ë¡£tip ¤Ê¤É¤Î¥×¥í¥»¥¹¤ò spawn ¤¹¤ë¾ì¹ç¡¢tip ¤ÎÅÔ¹ç¤Ç ¥Ö¥ì¡¼¥¯¾õÂÖ¤òºî¤ë¤Ù¤­¤Ç¤¢¤ë¡£
-s ¥Õ¥é¥°¤Ï¡¢½ÐÎϤò¶¯À©Åª¤Ë"ÃÙ¤¯"¤¹¤ë¡£·ë²Ì¡¢¥³¥ó¥Ô¥å¡¼¥¿¤¬ÂǤÁ¹þ¤ó¤Ç¤¤¤ë ¥Ð¥Ã¥Õ¥¡¤Ë¿Í´Ö¤¬ÂǤÁ¹þ¤ó¤Ç¤·¤Þ¤¦¾õ¶·¤òÈò¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¤³¤Î½ÐÎÏ¤Ï ÊÑ¿ô"send_slow"¤ÎÃͤÇÀ©¸æ¤µ¤ì¤ë¡£¤³¤ÎÊÑ¿ô¤ÏÆó¤Ä¤ÎÍ×ÁǤò»ý¤Ä¥ê¥¹¥È¤Ç¤¢¤ë¡£ ºÇ½é¤ÎÍ×ÁǤϡ¢¥¢¥È¥ß¥Ã¥¯¤ËÁ÷¤ë¥Ð¥¤¥È¿ô¤Ç¤¢¤ë¡£2 ÈÖ¤á¤ÎÍ×ÁǤϥ¢¥È¥ß¥Ã¥¯¤ËÁ÷¤ë ´Ö³Ö(ÉÃ)¤Ç¤¢¤ë¡£Î㤨¤Ð¡¢ "set send_slow {10 .001}" ¤Ï "send -s" ¤Ë 10 ʸ»úÁ÷¤ëËè¤Ë1¥ß¥êÉÃÂԤĤ褦¤Ë»Ø¼¨¤¹¤ë¡£
-h ¥Õ¥é¥°¤Ï¡¢¿Í´Ö¤Î¼ÂºÝ¤ÎÆþÎϤ˻÷¤»¤Æ send ¤ò¹Ô¤Ê¤¦¡£(¥¢¥ë¥´¥ê¥º¥à¤Ï¡¢ Weibull distribution ¤Ë´ð¤Å¤¤¤Æ¤¤¤Æ¡¢¤³¤ÎÆÃÄê¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó Expect? ¤Ë ¹ç¤ï¤»¤ë¤¿¤á¤Î½¤Àµ¤¬¹Ô¤Ê¤ï¤ì¤Æ¤¤¤ë¡£) ¤³¤Î½ÐÎϤÏÊÑ¿ô"send_human"¤ÎÃͤÇÀ©¸æ¤µ¤ì¤Æ¤¤¤Æ¡¢¤³¤ÎÊÑ¿ô¤Ï 5 ¤Ä¤ÎÍ×ÁǤ«¤é ¤Ê¤ë¥ê¥¹¥È¤ÇºÇ½é¤Î 2 ¤Ä¤ÎÍ×ÁǤÏʸ»ú´Ö¤ÎÊ¿¶Ñ¥¤¥ó¥¿¡¼¥Ð¥ë»þ´Ö(ÉÃ)¤Ç¤¢¤ë¡£ 1 ¤Ä¤á¤¬¥Ç¥Õ¥©¥ë¥ÈÃͤǡ¢2 ¤Ä¤á¤¬(Ä̾ïȯÀ¸¤¹¤ëÈù̯¤ÊÂÔ¤Á»þ´Ö¤òɽ¸½¤¹¤ë) ñ¸ì¤Î½ª¤ê¤ÎÃͤǤ¢¤ë¡£3 ¤Ä¤á¤ÎÍ×ÁǤÏÊÑưΨ¤Ç¤¢¤ë¡£ ²Äǽ¤ÊÃÍ¤Ï 0 ¤«¤é ̵¸ÂÂç¤Ç¤¢¤ë¡£ºÇ¸å¤Î 2 ¤Ä¤Î¥Ñ¥é¥á¥¿¤Ï¡¢¤½¤ì¤¾¤ì¡¢ ¥¤¥ó¥¿¡¼¥Ð¥ë»þ´Ö¤ÎºÇ¾®ÃͤȺÇÂçÃͤǤ¢¤ë¡£¤³¤Î 2 ¤Ä¤ÎÃͤϺǸå¤Ë»È¤ï¤ì¤Æ¡¢ ºÇ½ª»þ¹ï¤ò¥¯¥ê¥Ã¥×¤¹¤ë¡£¤³¤Î 2 Ãͤ¬°ã¤¦¤Èµæ¶Ë¤ÎÊ¿¶Ñ¤ÏÍ¿¤¨¤é¤ì¤¿Ê¿¶Ñ¤È¤Ï¡¢ Á´¤¯°ã¤Ã¤¿¤â¤Î¤Ë¤Ê¤ë¡£
Îã¤È¤·¤Æ¡¢Â³¤¯¥³¥Þ¥ó¥É¤¬°ìÄê¤Î®Å٤Ǯ¤¯ÂǤĥ¿¥¤¥Ô¥¹¥È¤ò ¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë:



    set send_human {.1 .3 1 .05 2}

    send -h "I'm hungry.  Let's do lunch."



¥Ï¥ó¥°¤µ¤»¤Æ¤·¤Þ¤Ã¤¿¸å¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¤·¤¿Êý¤¬Îɤ¤¤À¤í¤¦¡£:



    set send_human {.4 .4 .2 .5 100}

    send -h "Goodd party lash night!"



send ¤Ë¥¨¥é¡¼¤ä½¤Àµ¤òËä¤á¹þ¤ó¤Ç¤¢¤Ã¤Æ¤â¡¢ ¥¨¥é¡¼¤Ï¥·¥ß¥å¥ì¡¼¥È¤µ¤ì¤Ê¤¤ÅÀ¤ËÃí°Õ¤¹¤ë¤³¤È¡£

¥Ö¥ì¡¼¥¯¤òÁ÷¤ë¤¿¤á¤ä¡¢¤æ¤Ã¤¯¤ê¤·¤¿½ÐÎϤò¹Ô¤Ê¤Ã¤¿¤ê¡¢¿Í´Ö¤¬½ÐÎϤ·¤¿¤è¤¦¤Ë ¸«¤»¤«¤±¤ë¤¿¤á¤Ë¥Ì¥ëʸ»ú¤òÁ÷¤ë¥Õ¥é¥°¤ÏÁê¸ßÇÓ¾¤µ¤ì¤ë¡£ ºÇ¸å¤Ë»ØÄꤵ¤ì¤¿¤â¤Î¤À¤±¤¬»È¤ï¤ì¤ë¡£¤½¤ì°Ê¾å¤Ï¡¢ string ¤Î°ú¿ô¤¬¡¢¥Ì¥ëʸ»ú¤¢¤ë¤¤¤Ï¥Ö¥ì¡¼¥¯¤òÁ÷¤ë¥Õ¥é¥°¤È¤·¤Æ»ØÄê¤Ç¤­¤ë¡£

ºÇ½é¤Î send ¤è¤êÁ°¤Ë expect ¤òÃÖ¤¤¤¿Êý¤¬Îɤ¤¡£ expect ¤Ï¡¢¥×¥í¥»¥¹¤¬»Ï¤Þ¤ë¤Î¤òÂԤƤ뤬¡¢ send ¤ÏÂԤƤʤ¤¡£ Æäˡ¢ºÇ½é¤Î send ¤Ï¡¢¥×¥í¥»¥¹¤¬Áö¤ê»Ï¤á¤ëÁ°¤Ë´°Î»¤¹¤ë¡£¤¢¤Ê¤¿¤Î¥Ç¡¼¥¿¤¬Ìµ»ë¤µ¤ì¤ë ´í¸±¤¬¤¢¤ë¡£ ºÇ½é¤Ë¥×¥í¥ó¥×¥È¤òɽ¼¨¤·¤Ê¤¤¤è¤¦¤ÊÂÐÏÃŪ¤Ê¥×¥í¥°¥é¥à¤Ç¤Ï¡¢ ¼¡¤Î¤è¤¦¤Ë send ¤ÎÁ°¤Ë¥Ç¥£¥ì¥¤¤ò¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤ë:




    # ¤É¤Î¤è¤¦¤ËÇˤ뤫¤Î¥Ò¥ó¥È¤ò¥Ï¥Ã¥«¡¼¤ËÍ¿¤¨¤Æ¤·¤Þ¤ï¤Ê¤¤¤è¤¦¤Ë¡¢

    # ¤³¤Î¥·¥¹¥Æ¥à¤Ç¤Ï³°Éô¤Î¥Ñ¥¹¥ï¡¼¥É¤ËÂФ¹¤ë¥×¥í¥ó¥×¥È¤òÄ󶡤·¤Ê¤¤¡£

    # exec ¤¬´°Î»¤¹¤ë¤Î¤ò 5 ÉÃÂԤơ£

    spawn telnet very.secure.gov

    sleep 5

    send password\r



exp_send ¤Ï send ¤Î¥¨¥¤¥ê¥¢¥¹¤Ç¤¢¤ë¡£¤¢¤Ê¤¿¤¬ Expectk ¤«¡¢Tk ´Ä¶­¤ÇÆ°¤¯ Expect ¤Î¾¤ÎÊѼï¤ò »È¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢ send ¤Ï¡¢Á´¤¯°Û¤Ê¤Ã¤¿ÌÜŪ¤Î¤¿¤á¤Ë»È¤ï¤ì¤Æ¤¤¤ë¡£ exp_send ¤¬¡¢Î¾´Ä¶­¤Î´Ö¤Ç¤Î¸ß´¹À­¤Î¤¿¤á¤ËÄ󶡤µ¤ì¤Æ¤¤¤ë¡£ »÷¤¿¤è¤¦¤Ê¥¨¥¤¥ê¥¢¥¹¤¬Â¾¤Î Expect ¤Î¾¤Î send ¥³¥Þ¥ó¥É¤Î¤¿¤á¤ËÄ󶡤µ¤ì¤Æ¤¤¤ë¡£
send_error [-flags] string
send ¤È»÷¤¿¤è¤¦¤Ê¤â¤Î¤Ç¡¢¸½¥×¥í¥»¥¹¤Ç¤Ê¤¯ stderr ¤Ë½ÐÎϤµ¤ì¤ë¡£
send_log [--] string
send ¤È»÷¤¿¤è¤¦¤Ê¤â¤Î¤Ç¡¢¥í¥°¥Õ¥¡¥¤¥ë¤À¤±¤Ë string ¤òÁ÷¤ë¡£( log_file ¤ò»²¾È¡£) °ú¿ô¤Ï¥í¥°¥Õ¥¡¥¤¥ë¤¬ open ¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð̵»ë¤µ¤ì¤ë¡£
send_tty [-flags] string
send ¤È»÷¤¿¤è¤¦¤Ê¤â¤Î¤Ç¡¢¸½¥×¥í¥»¥¹¤Ç¤Ê¤¯ /dev/tty ¤Ø½ÐÎϤòÁ÷¤ë¡£
send_user [-flags] string
send ¤È»÷¤¿¤è¤¦¤Ê¤â¤Î¤Ç¡¢¸½¥×¥í¥»¥¹¤Ç¤Ê¤¯É¸½à½ÐÎϤؽÐÎϤòÁ÷¤ë¡£
sleep seconds
¤Ï¡¢Í¿¤¨¤é¤ì¤¿¿ô»ú¤ÎÉÿô¤À¤±¥¹¥¯¥ê¥×¥È¤¬¥¹¥ê¡¼¥×¤¹¤ë¡£ seconds ¤Ï¡¢10¿Ê¿ô¤À¤±¤¬µö¤µ¤ì¤ë¡£ (Expectk ¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢Tk¤Î¥¤¥Ù¥ó¥È¤È)³ä¤ê¹þ¤ß¤Ï¡¢Expect¤¬ ¥¹¥ê¡¼¥×¤·¤Æ¤¤¤ë´Ö¤â½èÍý¤µ¤ì¤ë¡£
spawn [args] program [args]
program args ¤òÁö¤é¤»¤ë¿·¤·¤¤¥×¥í¥»¥¹¤òÀ¸À®¤¹¤ë¡£¤½¤Îɸ½àÆþÎϤÈɸ½à½ÐÎÏ¤Ï Expect ¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤ë¡£¤½¤ì¤Ç¡¢Â¾¤Î Expect ¥³¥Þ¥ó¥É¤ÇÆɤó¤À¤ê½ñ¤¤¤¿¤ê¤Ç¤­¤ë¡£ Àܳ¤Ï close ¤Ë¤è¤Ã¤Æ¡¢¤¢¤ë¤¤¤Ï¡¢¥×¥í¥»¥¹¤½¤Î¤â¤Î¤¬¥Õ¥¡¥¤¥ë ID ¤Î ¤¤¤º¤ì¤«¤ò¥¯¥í¡¼¥º¤·¤¿¾ì¹ç¡¢Ç˲õ¤µ¤ì¤ë¡£
¥×¥í¥»¥¹¤Ï spawn ¤Ë¤è¤Ã¤Æ»Ï¤á¤é¤ì¤ë¡£ÊÑ¿ô spawn_id ¤Ë¤Ï¡¢¤½¤Î¥×¥í¥»¥¹¤Ø¤Î»²¾È¤ò¹Ô¤Ê¤¦¼±Ê̻Ҥ¬ÀßÄꤵ¤ì¤ë¡£ spawn_id ¤Ë¤è¤Ã¤Æµ­½Ò¤µ¤ì¤ë¥×¥í¥»¥¹¤Ï current process ¤¬¹Í褵¤ì¤ë¡£ spawn_id ¤Ï¡¢Æɤó¤Ç¤â½ñ¤¤¤Æ¤âÎɤ¯¡¢¸ú²ÌŪ¤Ê¥¸¥ç¥ÖÀ©¸æ¤òÄ󶡤¹¤ë¡£
user_spawn_id ¤Ï¥æ¡¼¥¶¡¼¤ò»²¾È¤¹¤ë¼±Ê̻ҤÎÆþ¤Ã¤¿¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤Ç¤¢¤ë¡£ Î㤨¤Ð¡¢ spawn_id ¤¬¡¢¤³¤ÎÃͤËÀßÄꤵ¤ì¤¿¾ì¹ç¡¢ expect ¤Ï¡¢ expect_user ¤Î¤è¤¦¤ÊÆ°¤­¤ò¤¹¤ë¡£
error_spawn_id ¤Ï¡¢É¸½à¥¨¥é¡¼½ÐÎϤò»²¾È¤¹¤ë¼±Ê̻ҤÎÆþ¤Ã¤¿¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤Ç¤¢¤ë¡£ Î㤨¤Ð¡¢ spawn_id ¤¬¡¢¤³¤ÎÃͤËÀßÄꤵ¤ì¤¿¾ì¹ç¡¢ send ¤Ï¡¢ send_error ¤Î¤è¤¦¤ÊÆ°¤­¤ò¤¹¤ë¡£
tty_spawn_id ¤Ï¡¢/dev/tty ¤ò»²¾È¤¹¤ë¼±Ê̻ҤÎÆþ¤Ã¤¿¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤Ç¤¢¤ë¡£ /dev/tty ¤¬Â¸ºß¤·¤Ê¤¤(cron, at, ¥Ð¥Ã¥Á¥¹¥¯¥ê¥×¥È¤ÎÃæ)¾ì¹ç¡¢ tty_spawn_id ¤ÏÄêµÁ¤µ¤ì¤Ê¤¤¡£°Ê²¼¤Î¤è¤¦¤Ë³Îǧ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£:



    if {[info vars tty_spawn_id]} {

        # /dev/tty exists

    } else {

        # /dev/tty doesn't exist

        # probably in cron, batch, or at script

    }



spawn UNIX ¥×¥í¥»¥¹ ID ¤òÉüµ¢¤¹¤ë¡£spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤¬¤Ê¤¤¾ì¹ç¡¢0 ¤¬ Éüµ¢¤¹¤ë¡£ÊÑ¿ô spawn_out(slave,name) ¤Ï pty ¥¹¥ì¡¼¥Ö¥Ç¥Ð¥¤¥¹¤Î̾Á°¤ËÀßÄꤵ¤ì¤ë¡£
¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ spawn ¤Ï¥³¥Þ¥ó¥É̾¤È°ú¿ô¤ò¥¨¥³¡¼¤¹¤ë¡£ -noecho ¥Õ¥é¥°¤Ç spawn ¤¬¤³¤¦¤¹¤ë¤Î¤ò»ß¤á¤é¤ì¤ë¡£
-console ¥Õ¥é¥°¤Ï¡¢¥³¥ó¥½¡¼¥ë¤Ø¤Î½ÐÎϤòµ¯¤³¤·¡¢spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤Ø¤Î ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤ë¡£¤³¤Îµ¡Ç½¤Ï̤¥µ¥Ý¡¼¥È¤Î¥·¥¹¥Æ¥à¤¬¤¢¤ë¡£
ÆâÉôŪ¤Ë¡¢ spawn ¤Ï pty ¤ò»È¤¤¡¢¥æ¡¼¥¶¡¼¤Î tty ¤ÈƱ¤¸¤è¤¦¤Ë½é´ü²½¤µ¤ì¤ë¡£¤³¤ì¤Ï¡¢¤«¤Ê¤ê ½é´ü²½¤·¤Æ¤·¤Þ¤¦¤Î¤ÇÁ´¤Æ¤ÎÀßÄ꤬ (stty(1)¤Ë¤è¤ë¤È) "Àµ¾ï(sane)" ¤Ë¤Ê¤ë¡£ ÊÑ¿ô stty_init ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤È¡¢stty ¤Î°ú¿ô¤Î·Á¼°¤ò²ò¼á¤Ç¤­¤ë¤Î¤Ç¡¢¤è¤ê¾ÜºÙ¤ÊÀßÄê¤ò ¹Ô¤Ê¤¨¤ë¡£Î㤨¤Ð¡¢ "set stty_init raw" ¤Ï¡¢°Ê¹ß spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤ÎüËö¤ò raw ¥â¡¼¥É¤Ç³«»Ï¤¹¤ë¡£ -nottycopy ¤Ï¡¢¥æ¡¼¥¶¡¼¤Î tty ¤Ë´ð¤Å¤¤¤¿½é´ü²½¤òÈô¤Ð¤¹¡£ -nottyinit ¤Ï¡¢"Àµ¾ï¤Ê"½é´ü²½¤òÈô¤Ð¤¹¡£
ÉáÄÌ¡¢ spawn ¤Ï¡¢¼Â¹Ô¤¹¤ë¤Î¤Ë¤ï¤º¤«¤Î»þ´Ö¤·¤«¤«¤«¤é¤Ê¤¤¡£spawn ¤Ë»þ´Ö¤ò¤«¤±¤¿¤¤¤Î¤Ç ¤¢¤ì¤Ð¡¢¤ª¤½¤é¤¯³ä¤ê¹þ¤Þ¤ì¤¿ pty ¤ËÁø¶ø¤¹¤ë¤À¤í¤¦¡£¤¿¤¯¤µ¤ó¤Î¥Æ¥¹¥È¤¬ ´Ö°ã¤Ã¤¿¥×¥í¥»¥¹¤Ë³Ý¤«¤ê¹ç¤¦¤³¤È¤òÈò¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ (³ä¤ê¹þ¤Þ¤ì¤¿ pty ¤Ë¤Ä¤­¡¢10 É䫤«¤ë¡£) -d ¥ª¥×¥·¥ç¥ó¤ò¤Ä¤±¤Æ Expect ¤òÁö¤é¤»¤ë¤È¡¢ Expect ¤¬¤ª¤«¤·¤Ê¾õÂ֤Τ¿¤¯¤µ¤ó¤Î pty ¤ËÁø¶ø¤·¤Æ¤¤¤ë¤«¤É¤¦¤«¤¬É½¼¨¤µ¤ì¤ë¡£ ¤³¤ì¤é¤Î pty ¤¬¤Ä¤Ê¤¬¤Ã¤Æ¤¤¤ë¤¿¤á¤Ë¥×¥í¥»¥¹¤ò»¦¤»¤Ê¤¤¾ì¹ç¡¢¥ê¥Ö¡¼¥È¤¹¤ë¤·¤« Íê¤ì¤ëÉüµì¼êÃʤϤʤ¤¡£
exec(2)¤¬¼ºÇÔ¤·¤Æ program ¤¬ spawn ¤ËÀ®¸ù¤·¤Ê¤«¤Ã¤¿¾ì¹ç (Î㤨¤Ð¡¢ program ¤¬¤Ê¤«¤Ã¤¿¾ì¹ç¤Ê¤É)¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬¼¡¤Î interact ¤« expect ¥³¥Þ¥ó¥É¤ÇÉüµ¢¤¹¤ë¡£¤Ä¤Þ¤ê¡£ program ¤¬¡¢½ÐÎϤȤ·¤Æ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò½Ð¤·¤Æ¤¤¤ë¤è¤¦¤Ë¸«¤»¤ë¡£ ¤³¤ÎÆ°ºî¤Ï¡¢ spawn ¤Î¼ÂÁõ¤Î¼«Á³¤Êµ¢·ë¤Ç¤¢¤ë¡£ÆâÉô¤Ç¡¢spawn ¤¬¥Õ¥©¡¼¥¯¤µ¤ì¡¢¤½¤Î¸å¡¢ spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤¬¥ª¥ê¥¸¥Ê¥ë¤Î Expect ¥×¥í¥»¥¹¤È¤½¤Î spawn_id ¤Ç²ñÏäò¹Ô¤Ê¤¦¡£
-open ¥Õ¥é¥°¤Ï¡¢¼¡¤Î°ú¿ô¤ò Tcl ¥Õ¥¡¥¤¥ë¼±Ê̻ҤȤ·¤Æ²ò¼á¤¹¤ë(¤Ä¤Þ¤ê¡¢ open ¤ò¹Ô¤Ê¤Ã¤ÆÉüµ¢¤¹¤ë¡£ ) spawn id ¤Ï¡¢spawn ¤µ¤ì¤¿ id ¤È¤·¤Æ»È¤ï¤ì¤ë¡£(¥Õ¥¡¥¤¥ë¼±Ê̻Ҥϡ¢ ¤â¤¦»È¤¦¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£) ¤³¤ì¤Ë¤è¤ê¡¢ pty ¤ò½ü¤¯¡¢raw ¥Ç¥Ð¥¤¥¹¡¢¥Õ¥¡¥¤¥ë¡¢¥Ñ¥¤¥×¥é¥¤¥ó¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£ 0 ¤¬Ê֤äƤ¯¤ë¤Î¤Ï¡¢´ØÏ¢¤¹¤ë¥×¥í¥»¥¹¤¬¤Ê¤«¤Ã¤¿»þ¤Ç¤¢¤ë¡£ spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤Ø¤ÎÀܳ¤¬¥¯¥í¡¼¥º¤µ¤ì¤ë¤È¡¢Tcl ¥Õ¥¡¥¤¥ë¼±Ê̻Ҥ⠥¯¥í¡¼¥º¤µ¤ì¤ë¡£ -leaveopen ¥Õ¥é¥°¤Ï¡¢ -open ¤È»÷¤¿Æ°¤­¤ò¤¹¤ë¤¬¡¢ spawn id ¤ò¥¯¥í¡¼¥º¤·¤¿¸å¤â¥Õ¥¡¥¤¥ë¼±Ê̻Ҥò³«¤¤¤¿¤Þ¤Þ¤Ë¤¹¤ëÅÀ¤¬°ã¤¦¡£
-pty ¥Õ¥é¥°¤Ï¡¢ pty ¤ò¥ª¡¼¥×¥ó¤¹¤ë¤¬¥×¥í¥»¥¹¤òspawn¤·¤Ê¤¤¡£0 ¤¬Éüµ¢¤¹¤ë¤Î¤Ï¡¢ ´ØÏ¢¤¹¤ë¥×¥í¥»¥¹¤¬¤Ê¤¤¾ì¹ç¤Ç¤¢¤ë¡£spawn_id ¤Ï¡¢Ä̾ïÄ̤êÀßÄꤵ¤ì¤ë¡£
ÊÑ¿ô spawn_out(slave,fd) ¤Ë¤Ï¡¢pty ¥¹¥ì¡¼¥Ö¤È¤Ä¤Ê¤¬¤Ã¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¼±Ê̻Ҥ¬ÀßÄꤵ¤ì¤ë¡£ "close -slave" ¤Ç close ¤Ç¤­¤ë¡£
-ignore ¥Õ¥é¥°¤Ï¡¢spawn ¤µ¤ì¤¿¥×¥í¥»¥¹Ãæ¤Ç̵»ë¤µ¤ì¤ë¥·¥°¥Ê¥ë¤Î̾Á°¤ò»Ø¼¨¤¹¤ë¡£ ¤Ê¤±¤ì¤Ð¡¢¥·¥°¥Ê¥ë¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¿¶Éñ¤¤¤ò¤¹¤ë¡£¥·¥°¥Ê¥ë¤Î̾Á°¤Ï trap ¥³¥Þ¥ó¥É¤Ç»È¤¦Ì¾Á°¤ÈƱ¤¸¤Ç¤¢¤ë¡£³Æ¥·¥°¥Ê¥ë¤òʬΥ¤¹¤ë¤Î¤Ë¥Õ¥é¥°¤¬ ɬÍפÊÅÀ¤ò½ü¤¤¤Æ¤Ï¡£
strace level
¤Ï¡¢°Ê¹ß¤ÎÌ¿Îá¤ò¼Â¹Ô¤¹¤ëÁ°¤Ëɽ¼¨¤ò¹Ô¤Ê¤¦¡£ (Tcl ¤Î trace ¤Ï¡¢ÊÑ¿ô¤Î¥È¥ì¡¼¥¹¤ò¹Ô¤Ê¤¦¡£) level ¤Ï¡¢¥È¥ì¡¼¥¹¤Ø¤Î¸Æ¤Ó½Ð¤·¥¹¥¿¥Ã¥¯¤Î¿¼¤µ¤ò¼¨¤¹¡£ Î㤨¤Ð¡¢ °Ê²¼¤Î¥³¥Þ¥ó¥É¤Ï Expect ºÇ½é¤Î 4 ¥ì¥Ù¥ë¤Î¸Æ¤Ó½Ð¤·¤ò¥È¥ì¡¼¥¹¤¹¤ë¡£ ¤½¤ì°Ê¾å¤Î¿¼¤µ¤Ï¥È¥ì¡¼¥¹¤·¤Ê¤¤¡£



    expect -c "strace 4" script.exp



-info ¥Õ¥é¥°¤ò»ØÄꤹ¤ë¤È¡¢strace ¤ÏºÇ¸å¤Î info ¤Ç¤Ê¤¤»ØÄê¤ÎÆâÍƤòÉüµ¢¤¹¤ë¡£

stty args
¤ÏüËö¥â¡¼¥É¤òÊѹ¹¤¹¤ë¡£³°Éô¤Î stty ¥³¥Þ¥ó¥É¤È»÷¤¿¤è¤¦¤Ê¤â¤Î¤Ç¤¢¤ë¡£

¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢À©¸æ¤·¤Æ¤¤¤ëüËö¤¬¥¢¥¯¥»¥¹¤µ¤ì¤ë¡£Â¾¤ÎüËö¤Ï¡¢ "< /dev/tty..." ¤òÄɲ乤뤳¤È¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤ë¡£(°ú¿ô¤ò°ì¤Ä¤Î°ú¿ô¤Ë ¤Þ¤È¤á¤ë¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£)

¥¹¥Æ¡¼¥¿¥¹Í×µá¤Ï¥³¥Þ¥ó¥É¤Î·ë²Ì¤È¤·¤Æ¥¹¥Æ¡¼¥¿¥¹¤òÉüµ¢¤¹¤ë¡£ ¥¹¥Æ¡¼¥¿¥¹¤¬Í׵ᤵ¤ì¤º¤ËÀ©¸æ¤·¤Æ¤¤¤ëüËö¤Ë¥¢¥¯¥»¥¹¤¹¤ë¾ì¹ç¡¢Ä¾Á°¤Î raw ¤È echo ¤Î¾õÂÖ¤òÊÖ¤¹¡£

Î㤨¤Ð¡¢°ú¿ô raw ¤« -cooked ¤Ï¡¢Ã¼Ëö¤ò raw ¥â¡¼¥É¤ËÀßÄꤹ¤ë¡£ °ú¿ô -raw ¤« cooked ¤Ï¡¢Ã¼Ëö¤ò cooked ¥â¡¼¥É¤ËÀßÄꤹ¤ë¡£ °ú¿ô echo ¤« -echo ¤Ï¡¢Ã¼Ëö¤ò¤½¤ì¤¾¤ì echo ¤¢¤ë¤¤¤Ï noecho ¥â¡¼¥É¤ËÀßÄꤹ¤ë¡£

°Ê²¼¤ÎÎã¤Ï¡¢°ì»þŪ¤Ê¥¨¥³¡¼¶Ø»ß¤ò¤É¤¦¤ä¤Ã¤Æ¤ª¤³¤Ê¤¦¤«¤ò¼¨¤¹¡£ ¤³¤ì¤Ï¡¢Â¾¤Î¼«Æ°¥¹¥¯¥ê¥×¥È¤Ç¡¢¤½¤ÎÃæ¤Ë¥Ñ¥¹¥ï¡¼¥É¤¬Ëä¤á¹þ¤Þ¤ì¤ë¤Î¤ò Ëɤ°¤³¤È¤Ë»È¤ï¤ì¤ë¡£(¤â¤Ã¤ÈµÄÏÀ¤·¤¿¤±¤ì¤Ð¡¢²¼¤Î EXPECT ¥Ò¥ó¥È¤Ë ¤¢¤ë¡£)



    stty -echo

    send_user "Password: "

    expect_user -re "(.*)\n"

    set password $expect_out(1,string)

    stty echo



system args
¤Ï¡¢ args ¤ò¡¢sh(1)¤ËÆþÎϤ¹¤ë¡£Ã¼Ëö¤«¤é¥³¥Þ¥ó¥É¤ò᤯¤Î¤È¤Á¤ç¤¦¤ÉƱ¤¸¤Ç¤¢¤ë¡£ Expect ¤Ï¡¢¥·¥§¥ë¤¬½ª¤ë¤Î¤òÂԤġ£sh ¤«¤é¤ÎÉüµ¢Ãͤϡ¢ exec ¤¬¤½¤ÎÉüµ¢Ãͤò°·¤¦¤Î¤ÈƱ¤¸¤Ë°·¤ï¤ì¤ë¡£
exec ¤¬¡¢¥¹¥¯¥ê¥×¥È¤Ëɸ½àÆþ½ÐÎϤò¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¤Î¤ÈÂоÈŪ¤Ë¡¢ ÂоÈŪ¤Ë system ¤Ï¡¢¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤ò¹Ô¤Ê¤ï¤Ê¤¤¡£(¾¤Ëʸ»úÎ󤽤Τâ¤Î¤Ç¥ê¥À¥¤¥ì¥¯¥È¤ò »Ø¼¨¤·¤Ê¤¤¸Â¤ê¡£) ¤½¤ì¤Ç¡¢/dev/tty ¤ÈľÀÜÏ䵤ʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤¥×¥í¥°¥é¥à¤ò »È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£Æ±¤¸Íýͳ¤Ç¡¢ system ¤Î·ë²Ì¤Ï¡¢¥í¥°¤Ëµ­Ï¿¤µ¤ì¤Ê¤¤¡£
timestamp [args]
¤Ï¡¢¥¿¥¤¥à¥¹¥¿¥ó¥×¤òÉüµ¢¤¹¤ë¡£ °ú¿ô¤¬¤Ê¤¤¾ì¹ç¡¢Éüµ¢¤¹¤ë¤Þ¤Ç¤ÎÉÿô¤¬Ê֤롣

-format ¥Õ¥é¥°¤Ï¡¢Ê¸»úÎó¤¬Â³¤¯¤¬¡¢¤½¤Îʸ»úÎó¤Ë POSIX ¤Î strftime ¤Î¥ë¡¼¥ë¤Ë½¾¤Ã¤ÆÃÖ´¹¤¬¤«¤«¤ë¡£ Î㤨¤Ð¡¢ %a ¤ÏÍËÆü(¤¹¤Ê¤ï¤Á¡¢Sat)¤È¤«¡£Â¾¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë¡£:


    %a      άµ­¤µ¤ì¤¿ÍËÆü¤Î̾Á°

    %A      ά¤µ¤ì¤Ê¤¤ÍËÆü¤Î̾Á°

    %b      άµ­¤µ¤ì¤¿·î¤Î̾Á°

    %B      ά¤µ¤ì¤Ê¤¤·î¤Î̾Á°

    %c      ¼¡¤Î·Á¼°¤Ç½ñ¤«¤ì¤¿»þ¹ï: Wed Oct  6 11:45:56 1993

    %d      Æü (01-31)

    %H      »þ (00-23)

    %I      »þ (01-12)

    %j      Æü (001-366)

    %m      ·î (01-12)

    %M      ʬ (00-59)

    %p      am ¤Þ¤¿¤Ï pm

    %S      ÉÃ (00-61)

    %u      Æü (1-7, ·îÍËÆü¤¬½µ¤ÎºÇ½é¤ÎÆü)

    %U      ½µ (00-53, ºÇ½é¤ÎÆüÍËÆü¤¬Âè1½µ¤ÎºÇ½é¤ÎÆü)

    %V      ½µ (01-53, ISO 8601 ¥¹¥¿¥¤¥ë)

    %w      Æü (0-6)

    %W      ½µ (00-53, ºÇ½é¤Î·îÍËÆü¤¬Âè1½µ¤ÎºÇ½é¤ÎÆü)

    %x      date-time as in: Wed Oct  6 1993

    %X      time as in: 23:59:59

    %y      year (00-99)

    %Y      year as in: 1993

    %Z      timezone (or nothing if not determinable)

    %%      a bare percent sign



¤³¤Î¾¤Î % »ØÄê¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£Â¾¤Îʸ»ú¤ÏÊѹ¹¤µ¤ì¤Ê¤¤¡£ C ¥í¥«¡¼¥ë¤À¤±¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤ë¡£

-seconds ¥Õ¥é¥°¤Ï¡¢ ¥¿¥¤¥à¥¹¥¿¥ó¥×¤òÉäÇɽ¤¹¡£

-gmt GMT ¥¿¥¤¥à¥¾¡¼¥ó¤Ç½ÐÎϤ¹¤ë¡£¥Ç¥Õ¥©¥ë¥È¤Ï¥í¡¼¥«¥ë¥¿¥¤¥à¥¾¡¼¥ó¤Ç¤¢¤ë¡£

trap [[command] signals]
¤ò¼Â¹Ô¤¹¤ë¤È¡¢°Ê¹ß»ØÄꤵ¤ì¤¿ signal ¤ò¼õ¤±¤È¤ë¤È»ØÄꤵ¤ì¤¿ command ¤ò¼Â¹Ô¤¹¤ë¡£ ¤³¤Î¥³¥Þ¥ó¥É¤Ï¡¢¥°¥í¡¼¥Ð¥ë¥¹¥³¡¼¥×¤Ç¼Â¹Ô¤µ¤ì¤ë¡£ ¤â¤·¡¢ command ¤¬»ØÄꤵ¤ì¤Ê¤±¤ì¤Ð¡¢¥·¥°¥Ê¥ë¥¢¥¯¥·¥ç¥ó¤¬Éüµ¢¤¹¤ë¡£ command ¤¬¡¢Ê¸»úÎó SIG_IGN ¤Ç¤¢¤ì¤Ð¡¢¥·¥°¥Ê¥ë¤¬Ìµ»ë¤µ¤ì¤ë¡£ command ¤¬¡¢Ê¸»úÎó SIG_DFL ¤Ç¤¢¤ì¤Ð¡¢¥·¥°¥Ê¥ë¤Ï¥Ç¥Õ¥©¥ë¥È¤ÎÆ°¤­¤ò¤¹¤ë¡£ signals ¤Ï¡¢¥·¥°¥Ê¥ë¤¬£±¤Ä¤Ç¤âÊ£¿ô¤Î¥·¥°¥Ê¥ë¤Î¥ê¥¹¥È¤Ç¤âÎɤ¤¡£¥·¥°¥Ê¥ë¤Ï¡¢ ¿ô»ú¤Èsignal(3)¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ëʸ»úÎó¤Î¤É¤Á¤é¤Ç»ØÄꤷ¤Æ¤âÎɤ¤¡£ ¥×¥ì¥Õ¥£¥¯¥¹¤Î"SIG"¤Ï¡¢¾Êά¤·¤Æ¤âÎɤ¤¡£

°ú¿ô¤¬¤Ê¤±¤ì¤Ð(¤Þ¤¿¤Ï¡¢°ú¿ô -number ¤Ç¤¢¤ì¤Ð)¡¢ trap ¤Ï¡¢trap¥³¥Þ¥ó¥É¤Ç²£¼è¤ê¤µ¤ì¤Æ¤¤¤ë¥·¥°¥Ê¥ëÈÖ¹æ¤òÉüµ¢¤¹¤ë¡£

-code ¥Õ¥é¥°¤Ï¥³¥Þ¥ó¥É¥³¡¼¥É¤òÊÖ¤¹¡£Tcl ¤¬¥³¥Þ¥ó¥É¤òÆ°¤«¤·»Ï¤á¤¿»þ¤Ë µ¢¤½¤¦¤È¤·¤¿¥³¡¼¥É¤Ç¤¢¤ë¡£

-interp ¥Õ¥é¥°¤Ï¡¢trap ¤¬Àë¸À¤µ¤ì¤¿»þ¤Ç¤Ê¤¯¥³¥Þ¥ó¥É¤¬³«»Ï¤µ¤ì¤¿»þ¤Ë¥¤¥ó¥¿¥×¥ê¥¿¤Ë ¥³¥Þ¥ó¥É¤òɾ²Á¤µ¤»¤ë¡£

-name ¥Õ¥é¥°¤Ï¡¢ trap ¥³¥Þ¥ó¥É¤Ë trap ¤Î¤«¤«¤Ã¤Æ¤¤¤ë¥·¥°¥Ê¥ë̾¤òµ¢¤¹¡£

-max ¥Õ¥é¥°¤Ï¡¢ trap ¥³¥Þ¥ó¥É¤ËÀßÄê¤Ç¤­¤ëºÇ¤âÂ礭¤Ê¥·¥°¥Ê¥ëÈÖ¹æ¤òµ¢¤¹¡£

Î㤨¤Ð¡¢"trap {send_user "Ouch!"} SIGINT" ¤Ï¡¢ ¥æ¡¼¥¶¡¼¤¬ ^C ¤ò²¡¤¹ÅÙ¤Ë "Ouch!" ¤òɽ¼¨¤¹¤ë¡£

¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢SIGINT(Ä̾ï ^C ¤ò²¡¤¹¤ÈȯÀ¸¤¹¤ë)¤ä SIGTERM ¤Ï¡¢Expect ¤ò exit ¤µ¤»¤Æ¤·¤Þ¤¦¡£¤³¤ì¤Ï¡¢Expect ¤¬µ¯Æ°»þ¤Ë ¼Â¹Ô¤¹¤ë°Ê²¼¤Î trap ¤Ë¤è¤Ã¤Æµ¯¤³¤Ã¤Æ¤¤¤ë¡£




    trap exit {SIGINT SIGTERM}



-D¥Õ¥é¥°¤ò»È¤Ã¤Æ¥Ç¥Ð¥Ã¥¬¤òµ¯Æ°¤¹¤ë¤Ê¤é¡¢SIGINT ¤¬ºÆÄêµÁ¤µ¤ì¤Æ¤«¤éÂÐÏ÷¿ ¥Ç¥Ð¥Ã¥¬¤¬µ¯Æ°¤µ¤ì¤ë¡£¤³¤ì¤Ï°Ê²¼¤Î trap ¤Ë¤è¤Ã¤Æµ¯¤³¤ë¡£



    trap {exp_debug 1} SIGINT



¥Ç¥Ð¥Ã¥¬¤Î¥È¥é¥Ã¥×¤Ï¡¢´Ä¶­ÊÑ¿ô EXPECT_DEBUG_INIT ¤òÀßÄꤷ¤Æ¡¢¿·¤·¤¯ trap ¤òµ¯Æ°¤¹¤ë¤³¤È¤ÇÊѹ¹¤Ç¤­¤ë¡£

¤â¤Á¤í¤ó¡¢¥¹¥¯¥ê¥×¥È¤Ëtrap¥³¥Þ¥ó¥É¤ò­¤¹¤À¤±¤ÇÎã¤Î¥È¥é¥Ã¥×¤ÏξÊý¤È¤â ¾å½ñ¤­¤Ç¤­¤ë¡£Æäˡ¢¼«ºî¤Î "trap exit SIGINT" ¤¬¤¢¤ë¤Ê¤é¡¢¤³¤ì¤Ï ¥Ç¥Ð¥Ã¥¬¤Î¥È¥é¥Ã¥×¤ò¾å½ñ¤­¤·¤Æ¤·¤Þ¤¦¡£¥æ¡¼¥¶¡¼¤Ë¥Ç¥Ð¥Ã¥¬¤òÁ´¤¯ ¿¨¤é¤»¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤Î¤Ë¡¢ÊØÍø¤Ç¤¢¤ë¡£

SIGINT ¤Î¥È¥é¥Ã¥×¤òÆȼ«¤ËÄêµÁ¤·¤¿¤¤¤±¤ì¤É¡¢¥Ç¥Ð¥Ã¥¬¤Ë¤âƱ»þ¤Ë³ä¤ê¹þ¤ó¤Ç ¤â¤é¤¤¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢¤³¤¦½ñ¤¯¡£:




    if ![exp_debug] {trap mystuff SIGINT}



Âå¤ï¤ê¤Ë¡¢Ê̤Υ·¥°¥Ê¥ë¤ò»È¤Ã¤Æ¥Ç¥Ð¥Ã¥¬¤Ë³ä¤ê¹þ¤ß¤ò¤«¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

trap ¤Ï¡¢SIGALRM ¤Î¥¢¥¯¥·¥ç¥ó¤ò¾å½ñ¤­¤·¤Ê¤¤¡£ Expect ¤¬ÆâÉô¤Ç»ÈÍѤ·¤Ê¤¤¡£ disconnect ¥³¥Þ¥ó¥É¤Ï¡¢SIGALRM¤ò SIG_IGN (ignore)¤ËÀßÄꤹ¤ë¡£ ¸å¤«¤éȯ¹Ô¤µ¤ì¤ë spawn ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤ë´Ö¡¢SIGALRM ¤Ï ¥Ç¥£¥¹¥¨¡¼¥Ö¥ëÃæ¤Ç¤¢¤ì¤ÐºÆÅÙ¥¤¥Í¡¼¥Ö¥ë¤Ë¤Ç¤­¤ë¡£

¤â¤Ã¤È¾ðÊó¤¬Íߤ·¤¤¾ì¹ç¡¢signal(3) ¤ò»²¾È¤¹¤ë¤³¤È¡£

wait [args]
¤Ï¡¢spawn ¤µ¤ì¤¿¥×¥í¥»¥¹(¤¢¤ë¤¤¤Ï¡¢Ì¾Á°¤Ä¤­¤Î¥×¥í¥»¥¹¤¬¤Ê¤±¤ì¤Ð¸½ºß¤Î¥×¥í¥»¥¹) ¤¬½ªÎ»¤¹¤ë¤Î¤òÂԤġ£
wait ¤Ï¡¢Ä̾ï 4 ¤Ä¤ÎÀ°¿ô¤Î¥ê¥¹¥È¤òµ¢¤¹¡£ ºÇ½é¤ÎÀ°¿ô¤Ï¡¢½ªÎ»¤òÂÔ¤Á¹½¤¨¤Æ¤¤¤ë¥×¥í¥»¥¹¤Î pid ¤Ç¤¢¤ë¡£ 2 ¤Ä¤á¤ÎÀ°¿ô¤Ï¡¢´ØÏ¢¤¹¤ë spawn id ¤Ç¤¢¤ë¡£ 3 ¤Ä¤á¤ÎÀ°¿ô¤Ï¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¥¨¥é¡¼¤¬¤¢¤ì¤Ð -1¡¢ ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢0 ¤Ç¤¢¤ë¡£ 3 ¤Ä¤á¤ÎÀ°¿ô¤¬ 0 ¤Ç¤¢¤ì¤Ð¡¢4 ¤Ä¤á¤ÎÀ°¿ô¤Ïspawn¤µ¤ì¤¿¥×¥í¥»¥¹¤«¤é¤Î¥ê¥¿¡¼¥ó ¥³¡¼¥É¤Ç¤¢¤ë¡£3 ¤Ä¤á¤ÎÀ°¿ô¤¬ -1 ¤Ç¤¢¤ì¤Ð¡¢4 ¤Ä¤á¤ÎÀ°¿ô¤Ï¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à ¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤¿ errno ¤ÎÃͤǤ¢¤ë¡£¥°¥í¡¼¥Ð¥ëÊÑ¿ô errorCode ¤âÀßÄꤵ¤ì¤ë¡£
ÄɲäÎÍ×ÁǤ¬ wait ¤ÎÉüµ¢Ãͤ˲äï¤Ã¤Æ¤â¹½¤ï¤Ê¤¤¡£¥ª¥×¥·¥ç¥ó¤Î5¤Ä¤á¤ÎÍ×ÁǤϡ¢¾ðÊ󥯥饹¤Î ¼±Ê̻ҤǤ¢¤ë¡£º£¤Î¤È¤³¤í¡¢¤³¤ÎÍ×ÁǤÎÍ£°ì²Äǽ¤ÊÃÍ¤Ï CHILDKILLED ¤Ç¡¢ ¤½¤Î¾ì¹ç¡¢¼¡¤ÎÆó¤Ä¤ÎÃͤ¬ C ¥¹¥¿¥¤¥ë¤Î¥·¥°¥Ê¥ë̾¤Èû¤¤Ê¸½ñ¤Ë¤è¤ëµ­½Ò¤Ç¤¢¤ë¡£
-i ¥Õ¥é¥°¤Ë¤è¤Ã¤Æ¡¢wait ¤ò¹Ô¤Ê¤¦Ì¾Á°ÉÕ¤­ spawn_id(¥×¥í¥»¥¹ ID ¤Ç¤Ï¤Ê¤¯)¤ò »ØÄꤹ¤ë¡£SIGCHLD ¥Ï¥ó¥É¥é¤ÎÆâÉô¤Ç¤Ï¡¢spawn ID -1 ¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢ spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤Î¤¤¤º¤ì¤«¤ò wait ¤Ç¤­¤ë¡£
-nowait ¥Õ¥é¥°¤ò»ØÄꤹ¤ë¤È¡¢wait ¤¬À®¸ù¤ÎÉüµ¢ÃͤǨ»þÉüµ¢¤¹¤ë¡£ (¤¢¤È¤Ç)¤½¤Î¥×¥í¥»¥¹¤¬ exit ¤¹¤ë¤È¡¢¼«Æ°Åª¤Ë¸å»ÏËö¤¬¹Ô¤Ê¤ï¤ì¡¢ÌÀ¼¨Åª¤Ë wait ¤¹¤ëɬÍפ¬¤Ê¤¤¡£
wait ¥³¥Þ¥ó¥É¤Ï¡¢°ú¿ô¤Ë "-i -1" ¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ fork ¤·¤¿¥×¥í¥»¥¹¤òÂԤĤ¿¤á¤Ë¤â»È¤ï¤ì¤ë¡£ spawn ¤·¤¿¥×¥í¥»¥¹¤ËÍѤ¤¤é¤ì¤ë¾ì¹ç¤È°Û¤Ê¤ê¡¢ ¤³¤Î¥³¥Þ¥ó¥É¤Ï¤¤¤Ä¤Ç¤â¼Â¹Ô¤Ç¤­¤ë¡£ ¤É¤Î¥×¥í¥»¥¹¤òÂԤĤ«¤òÀ©¸æ¤¹¤ë¤³¤È¤Ï½ÐÍè¤Ê¤¤¤¬¡¢ ÊÖ¤êÃÍ¤Ï¥×¥í¥»¥¹ ID ¤È¤·¤Æ¥Á¥§¥Ã¥¯¤Ç¤­¤ë¡£

¥é¥¤¥Ö¥é¥ê

Expect ¤Ï¡¢¥¹¥¯¥ê¥×¥È¤Î¤¿¤á¤ÎÆó¤Ä¤Î¥Ó¥ë¥È¥¤¥ó¥é¥¤¥Ö¥é¥ê¤ò¼«Æ°Åª¤ËÍý²ò¤¹¤ë¡£ ¤½¤ì¤é¤ÏÊÑ¿ô exp_library ¤ÈÊÑ¿ô exp_exec_library ¤ËÀßÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê̾¤È ¤·¤ÆÄêµÁ¤µ¤ì¤ë¡£¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ï¡¢Â¾¤Î¥¹¥¯¥ê¥×¥È¤Ë¤è¤Ã¤Æ»È¤¨¤ë ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥Õ¥¡¥¤¥ë¤¬Æþ¤Ã¤Æ¤¤¤ë¡£

exp_library ¤Ë¤Ï¡¢¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë°Í¸¤·¤Ê¤¤¥Õ¥¡¥¤¥ë¤¬³ÊǼ¤µ¤ì¤ë¡£ exp_exec_library ¤Ë¤Ï¡¢¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë°Í¸¤¹¤ë¥Õ¥¡¥¤¥ë¤¬³ÊǼ¤µ¤ì¤ë¡£ ¤¢¤Ê¤¿¤Î¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤Ï¡¢Î¾Êý¤Î¥Ç¥£¥ì¥¯¥È¥ê¤¬¶õ¤È¤¤¤¦¾ì¹ç¤â¤¢¤êÆÀ¤ë¡£ ¥Õ¥¡¥¤¥ë $exp_exec_library/cat-buffers ¤Î¸ºß¤Ï¡¢¤¢¤Ê¤¿¤Î¥·¥¹¥Æ¥à¤Î /bin/cat ¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤Ëº¸±¦¤µ¤ì¤ë¡£

À°·Á°õºþ

Expect ¥¹¥¯¥ê¥×¥È¤ò¤­¤ì¤¤¤Ë°õºþ¤¹¤ë¤¿¤á¤Î vgrind ¤ÎÄêµÁ¤¬¤¢¤ë¡£ Expect ¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤È°ì½ï¤ËÇÛÉÛ¤µ¤ì¤Æ¤¤¤ë vgrind ÄêµÁ¤¬Àµ¤·¤¯ ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤È²¾Äꤷ¤Æ¡¢¤³¤¦¤¹¤ì¤Ð»È¤¨¤ë¡£



    vgrind -lexpect file



Îã

¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ë¤è¤ëµ­½Ò¤Ç¤Ï¡¢¤¢¤é¤æ¤ë¤â¤Î¤ò¤É¤¦ÁȤ߹ç¤ï¤»¤ë¤Î¤«¤È ¤¤¤¦¤³¤È¤¬ÌÀÇò¤Ç¤Ï¤Ê¤¤¡£»ä¤È¤·¤Æ¤Ï¡¢ Expect ¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤Î example ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ëÎã¤òÆɤó¤Ç»î¤·¤Æ¤ß¤ÆÍߤ·¤¤¤È»×¤¦¡£ ¤¤¤¯¤Ä¤«¤ÏËÜʪ¤Î¥×¥í¥°¥é¥à¤Ç¤¢¤ë¡£¤½¤ì°Ê³°¤ÏÆÃÄê¤Î¥Æ¥¯¥Ë¥Ã¥¯¤Îñ½ã¤Ê²òÀâ¡¢ ¤¢¤È¡¢¤â¤Á¤í¤ó¡¢Ã±¤Ê¤ë¥¯¥¤¥Ã¥¯¥Ï¥Ã¥¯¤¬¾¯¤·¤¢¤ë¡£ INSTALL ¥Õ¥¡¥¤¥ë¤Ë¤Ï¤³¤ì¤é¤Î¥×¥í¥°¥é¥à¤Î´Êñ¤Ê¹¼³µ¤¬½ñ¤«¤ì¤Æ¤¤¤ë¡£

Expect ¤ÎÏÀʸ¤âÌò¤ËΩ¤Ä(´ØÏ¢¹àÌÜ»²¾È)¡£¤¤¤¯¤Ä¤«¤Ï¡¢½é´ü¥Ð¡¼¥¸¥ç¥ó¤Î Expect ¤Î ʸˡ¤ò»È¤Ã¤Æ¤¤¤ë¤¬¡¢¤½¤ì¤È¤È¤â¤Ë¤¢¤ëº¬ËÜŪ¤Ê¹Í¤¨¤Ï¡¢¤Ê¤ªÍ­¸ú¤Ç¤¢¤ê¡¢ ¤³¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤è¤ê¾ÜºÙ¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¡£

·Ù¹ð

³ÈÄ¥¤Ï Expect ¤Î¥³¥Þ¥ó¥É̾¤È¾×Æͤ¹¤ë¤«¤â¤·¤ì¤Ê¤¤¡£Î㤨¤Ð¡¢ send ¤Ï¡¢Tk ¤Ç¤ÏÁ´¤¯Ê̤ÎÌÜŪ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£ ¤½¤¦¤¤¤¦Íýͳ¤Ç¡¢¤Û¤È¤ó¤É¤Î Expect ¥³¥Þ¥ó¥É¤Ï¡¢"exp_XXXX" ¤È¤¤¤¦ Ê̤ε­Ë¡(¥¨¥¤¥ê¥¢¥¹)¤â¥µ¥Ý¡¼¥È¤¹¤ë¡£ "exp", "inter", "spawn", "timeout" ¤Ç»Ï¤Þ¤ë¥³¥Þ¥ó¥É¤ÈÊÑ¿ô¤Ï¡¢ ¥¨¥¤¥ê¥¢¥¹¤ò»ý¤¿¤Ê¤¤¡£ ¤³¤Î´Ä¶­´Ö¤Î¸ß´¹À­¤¬É¬ÍפǤ¢¤ì¤Ð¡¢³ÈÄ¥¤µ¤ì¤¿¥³¥Þ¥ó¥É̾¤òÍѤ¤¤ë¤³¤È¡£

Expect ¤Ï¡¢¤«¤Ê¤ê¼«Í³¤Ê¥¹¥³¡¼¥×¤ò»ý¤Ã¤Æ¤¤¤ë¡£Æäˡ¢ Expect ¥×¥í¥°¥é¥à¤Ç»ØÄꤷ¤¿¥³¥Þ¥ó¥É¤Ë¤è¤êÆɤ߹þ¤Þ¤»¤ëÊÑ¿ô¤Ï¡¢¤½¤Î¥í¡¼¥«¥ë¥¹¥³¡¼¥× Æâ¤Ç¤Þ¤ºÃµº÷¤µ¤ì¡¢¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð¡¢¥°¥í¡¼¥Ð¥ë¥¹¥³¡¼¥×¤Çõº÷¤µ¤ì¤ë¡£ Î㤨¤Ð¡¢¤³¤¦¤¹¤ë¤³¤È¤Ç expect ¤ò»È¤¦Á´¤Æ¤Î¥×¥í¥·¥¸¥ã¤Ë "global timeout" ¤ò½ñ¤¯É¬Íפ¬ ¤Ê¤¯¤Ê¤ë¡£ µÕ¤Ë¡¢¥×¥í¥·¥¸¥ãÆâ¤Ë½ñ¤«¤ì¤¿ÊÑ¿ô¤ÏÁ´¤Æ¥í¡¼¥«¥ë¥¹¥³¡¼¥×Æâ¤ËÀßÄꤵ¤ì¤ë¡£ ("global"¥³¥Þ¥ó¥É¤ò»ØÄꤷ¤Ê¤¤¸Â¤ê¤Ï)¡£¤³¤ÎÆ°ºî¤¬°ú¤­µ¯¤³¤¹¤â¤Ã¤È¤â¶¦Ä̤·¤¿ ÌäÂê¤Ï¡¢spawn ¤¬¥×¥í¥·¥¸¥ãÆâ¤Ç¼Â¹Ô¤µ¤ì¤¿»þ¤Ç¤¢¤ë¡£¥×¥í¥·¥¸¥ã¤Î³°¤Ç¤Ï¡¢ spawn_id ¤Ï¥¹¥³¡¼¥×¤Î¤¿¤á¡¢¤â¤Ï¤ä¸ºß¤·¤Ê¤¤¤Î¤Ç spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤Ïñ½ã¤Ë¤Ï ¥¢¥¯¥»¥¹ÉÔǽ¤È¤Ê¤ë¡£¤½¤Î¤è¤¦¤Ê¥×¥í¥»¥¹¤Ë¤Ï¡¢"global spawn_id"¤ò ÉÕ¤±²Ã¤¨¤Í¤Ð¤Ê¤é¤Ê¤¤¡£

multi-spawn µ¡Ç½¤¬»È¤¨¤Ê¤¤(¤Ä¤Þ¤ê¡¢¤¢¤Ê¤¿¤Î¥·¥¹¥Æ¥à¤¬ select (BSD *.*), poll (SVR>2),¤Þ¤¿¤Ï¡¢¤½¤ì¤ÈÅù²Á¤Ê¤â¤Î ¤Î¤¤¤º¤ì¤â ¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤)¾ì¹ç¡¢ Expect ¤Ï¡¢Æ±»þ¤Ë 1 ¥×¥í¥»¥¹¤·¤«À©¸æ¤Ç¤­¤Ê¤¤¡£ ¤³¤Î¾ì¹ç¡¢ spawn_id ¤ò̵Íý¤ËÀßÄꤷ¤¿¤ê¡¢spawn ¤µ¤ì¤¿¥×¥í¥»¥¹¤¬Áö¤Ã¤Æ¤¤¤ë´Ö¤Ë exec ¤ò»È¤Ã¤Æ ¥×¥í¥»¥¹¤ò¼Â¹Ô¤·¤¿¤ê¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤µ¤é¤Ë¡¢Ê£¿ô¤Î¥×¥í¥»¥¹(ÊÒÊý¤¬ ¥æ¡¼¥¶¡¼¤Ç¤â)¤«¤éƱ»þ¤Ë expect ¤¹¤ë¤³¤È¤â¤Ç¤­¤Ê¤¤¡£

üËöÀ©¸æ¥Ñ¥é¥á¥¿¤Ï¡¢¥¹¥¯¥ê¥×¥È¤ËÂ礭¤Ê±Æ¶Á¤òÍ¿¤¨¤ë¡£Î㤨¤Ð¡¢ ¥¹¥¯¥ê¥×¥È¤¬¥¨¥³¡¼¤òõ¤¹¤è¤¦¤Ë½ñ¤«¤ì¤Æ¤¤¤ì¤Ð¡¢¥¨¥³¡¼¤ò¥ª¥Õ¤Ë¤¹¤ë¤È Æ°ºî¤¬¤ª¤«¤·¤¯¤Ê¤ë¡£¤³¤ÎÍýͳ¤Ç¡¢Expect ¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç Àµµ¤¤Î üËö¥Ñ¥é¥á¥¿¤òÀßÄꤹ¤ë¡£ÉÔ¹¬¤Ê¤³¤È¤Ë¡¢¤³¤ÎÀßÄ꤬¾¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¤Þ¤º¤¤ ¾ì¹ç¤¬¤¢¤ë¡£Î㤨¤Ð¡¢emacs ¥·¥§¥ë¤Ï"Ä̾ï¤Î"¥Þ¥Ã¥Ô¥ó¥°¤òÊѹ¹¤·¤è¤¦¤È¤¹¤ë¡£ : newlines¤Ï¡¢carriage-return newlines ¤ËÊÑ´¹¤µ¤ì¤º newlines ¤Ë¥Þ¥Ã¥×¤µ¤ì¤ë¡£ ¤½¤·¤Æ¡¢¥¨¥³¡¼¤Ï¹Ô¤Ê¤ï¤ì¤Ê¤¤¡£¤³¤¦¥Þ¥Ã¥×¤µ¤ì¤ë¤³¤È¤Ç¡¢emacs ¤ÏÆþÎϹԤò ÊÔ½¸¤Ç¤­¤ë¡£»ÄÇ°¤Ê¤¬¤é¡¢Expect ¤Ï¤³¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¸¡½Ð¤Ç¤­¤Ê¤¤¡£

Expect ¤¬Ã¼Ëö¥Ñ¥é¥á¥¿¤Î¥Ç¥Õ¥©¥ë¥ÈÀßÄê¤ò¾å½ñ¤­¤·¤Ê¤¤¤è¤¦¤Ë»ØÄꤹ¤ë¤³¤È¤¬ ¤Ç¤­¤ë¤¬¡¢¤½¤¦¤¤¤Ã¤¿´Ä¶­¤ÇÆ°¤«¤¹¥¹¥¯¥ê¥×¥È¤ò½ñ¤¯¤È¤­¤ÏºÙ¿´¤ÎÃí°Õ¤¬ ɬÍפǤ¢¤ë¡£emacs ¤Î¾ì¹ç¡¢¥¨¥³¡¼¤ä²þ¹Ô¥³¡¼¥É¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò²óÈò¤·¤Ê¤±¤ì¤Ð ¤Ê¤é¤Ê¤¤¡£

( expect ¤È¤½¤ÎÊѼ¤ª¤è¤Ó¡¢ interact ¤È¤¤¤Ã¤¿)1 ¤Ä¤Î¥ê¥¹¥È¤Ë¥Ö¥ì¡¼¥¹¤µ¤ì¤¿°ú¿ô¤ò¼õ¤±¤È¤ë¥³¥Þ¥ó¥É¤Ï¡¢ ¥ê¥¹¥È¤¬°ú¿ô¤ò¤É¤ì¤À¤±»ý¤Ã¤Æ¤¤¤ë¤Î¤«¤òȽÃǤ¹¤ë¤Î¤Ë¡¢È¯¸«Åª¼êË¡¤òÍѤ¤¤ë¡£ ¤½¤Îȯ¸«Åª¼êË¡¤Ï¤¬¼ºÇÔ¤¹¤ëÍ£°ì¤Î¾ì¹ç¤Ï¡¢°ú¿ô¤Î°ì¤Ä¤ËÊ£¿ô¤Î\n¤¬Ëä¤á¹þ¤Þ¤ì¡¢ ¤½¤Î´Ö¤Ë¥Û¥ï¥¤¥È¥¹¥Ú¡¼¥¹¤¬¤Ê¤¤¾ì¹ç¤Ç¤¢¤ë¡£¤³¤ì¤Ï½½Ê¬¸¡½ÐÉÔǽ¤Ê¾õÂÖ¤À¤¬¡¢ °ú¿ô"-nobrace" ¤Ç¡¢¶¯À©Åª¤Ë°ì¤Ä¤Î°ú¿ô¤È¤·¤Æ°·¤¦¤³¤È¤¬¤Ç¤­¤ë¡£ ¼«Æ°Åª¤ËÀ¸À®¤µ¤ì¤¿ Expect ¥³¡¼¥ÉÃæ¤Ç»È¤ï¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¡£ ƱÍͤˡ¢-brace ¤ÏÊ£¿ô¤Î¥Ñ¥¿¡¼¥ó/¥¢¥¯¥·¥ç¥ó¤ò¤Ò¤È¤Ä¤Î°ú¿ô¤È¤·¤Æ°·¤¦¤³¤È¤ò ¶¯À©¤¹¤ë¡£

¥Ð¥°

¥×¥í¥°¥é¥à¤Ë "sex" ("Smart EXec" ¤« "Send-EXpect" ¤Îά) ¤È¤¤¤¦Ì¾Á°¤ò ¤Ä¤±¤ë¤Î¤Ï¼Â¤ËÌ¥ÎÏŪ¤À¤Ã¤¿¤Î¤À¤¬¡¢¥»¥ó¥¹¤ÎÎɤ¤Êý(¤¢¤ë¤¤¤Ï¡¢ ñ¤Ë¥Ô¥å¡¼¥ê¥¿¥Ë¥º¥à)¤¬Í¥À褵¤ì¤¿¡£

¥·¥§¥ë¤¬ spawn ¤µ¤ì¤ë¤Ètty¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤¤Èʸ¶ç¤ò¤¤¤Ã¤Æ¡¢¤·¤«¤·¡¢Æ°ºî¤Ï¤¹¤ë ¤È¤¤¤¦¥·¥¹¥Æ¥à¤¬¤¢¤ë¡£¤³¤ì¤Ï¡¢¤³¤Î¥·¥¹¥Æ¥à¤¬ttyÀ©¸æ¤òÆÀ¤ë¤¿¤á¤Îµ¡¹½¤ò »ý¤Ã¤Æ¤¤¤ë¤¬ Expect ¤Ï¤½¤ì¤òÃΤé¤Ê¤¤¤È¤¤¤¦°ÕÌ£¤Ç¤¢¤ë¡£¤É¤¦¤¤¤¦»ÅÁȤߤ«Ä´¤Ù¤Æ¡¢¤½¤Î¾ðÊó¤ò»ä¤Ë ÃΤ餻¤Æ¤Û¤·¤¤¡£

Ultrix 4.1 (¾¯¤Ê¤¯¤È¤âºÇ¿·¥Ð¡¼¥¸¥ç¥ó¤Î¤¢¤¿¤ê) ¤Ç¤Ï¡¢ 1000000 ¤òĶ¤¨¤ë¥¿¥¤¥à¥¢¥¦¥È¤ò 0 ¤È¤ß¤Ê¤·¤Æ¤·¤Þ¤¦¡£

Digital UNIX 4.0A (¤ª¤½¤é¤¯Â¾¤Î¥Ð¡¼¥¸¥ç¥ó¤â)¤Ï SIGCHLD ¥Ï¥ó¥É¥é¤ò ÄêµÁ¤¹¤ë¤È¡¢pty ¤Î³ä¤êÉÕ¤±¤òµñÈݤ¹¤ë¡£¾ÜºÙ¤Ï grantpt ¥Ú¡¼¥¸¤ò»²¾È¤Î¤³¤È¡£

IRIX 6.0 ¤Ï¡¢pty ¤Ø¤Î¥¢¥¯¥»¥¹À©¸æ¤òÀµ³Î¤Ë°·¤¨¤Ê¤¤¡£¤½¤ì¤Ç¡¢ Expect ¤Ï¡¢pty ¤¬¥¢¥í¥±¡¼¥È¤Ç¤­¤Ê¤¤¾ì¹ç¤Ï¡¢Â¾¤Î¿Í¤¬Á°¤Ë»È¤Ã¤¿ pty ¤Î ¥¢¥í¥±¡¼¥È¤ò»î¤ß¤ë¡£ IRIX 6.1 ¤Ë¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ë¤³¤È¡£

telnet (SunOS 4.1.2 ¤Ç¤Î¤ß³Îǧ)¤Ï¡¢TERM ¤¬ÀßÄꤵ¤ì¤Æ¤Ê¤¤¤È ¥Ï¥ó¥°¤¹¤ë¡£¤³¤ÎÌäÂê¤Ï cron ¤ä at ¤ä CGI ¥¹¥¯¥ê¥×¥È¤Ç»È¤¦»þ¤ËÌäÂê¤À (ÀßÄꤷ¤Ê¤¤¤Î¤Ç)¡£¤½¤ì¤Ç¡¢ ÌÀ¼¨Åª¤Ë»ØÄꤷ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤ - ËÜÅö¤Î¥¿¥¤¥×¤ÏÄ̾ï´Ø·¸¤Ê¤¤¡£ ²¿¤«¤ËÀßÄꤷ¤Æ¤Ê¤¤¤ÈÂÌÌܤʤΤÀ! °Ê²¼¤Îµ­½Ò¤Ï¤ª¤½¤é¤¯¤Û¤È¤ó¤É¤Î¾ì¹ç¤ò Ëþ­¤µ¤»¤ë¤À¤í¤¦¡£




    set env(TERM) vt100



tipt (BSDI BSD/OS 3.1 i386 ¤Ç¤Î¤ß³Îǧ)¤Ï¡¢SHELL ¤È HOME ¤¬ÀßÄꤵ¤ì¤Æ¤Ê¤¤¤È ¥Ï¥ó¥°¤¹¤ë¡£¤³¤ÎÌäÂê¤Ï cron ¤ä at ¤ä CGI ¥¹¥¯¥ê¥×¥È¤Ç»È¤¦»þ¤ËÌäÂê¤À (ÀßÄꤷ¤Ê¤¤¤Î¤Ç)¡£¤½¤ì¤Ç¡¢ ÌÀ¼¨Åª¤Ë»ØÄꤷ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤ - ËÜÅö¤Î¥¿¥¤¥×¤ÏÄ̾ï´Ø·¸¤Ê¤¤¡£ ²¿¤«¤ËÀßÄꤷ¤Æ¤Ê¤¤¤ÈÂÌÌܤʤΤÀ! °Ê²¼¤Îµ­½Ò¤Ï¤ª¤½¤é¤¯¤Û¤È¤ó¤É¤Î¾ì¹ç¤ò Ëþ­¤µ¤»¤ë¤À¤í¤¦¡£




    set env(SHELL) /bin/sh

    set env(HOME) /usr/local/bin



pty ¤Î¥¤¥ó¥×¥ê¥á¥ó¥È¤ÎÃæ¤Ë¤Ï¡¢¥×¥í¥»¥¹¤¬¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤ò¥¯¥í¡¼¥º¤·¤¿¸å¡¢ Æɤó¤Ç¤Ê¤¤½ÐÎϤò 10 ¤«¤é 15 Éøå(¤³¤ÎÃͤϥ¤¥ó¥×¥ê¥á¥ó¥È¤Ë°Í¸)¤ËÅꤲ¤Æ¤¯¤ë ¤â¤Î¤¬¤¢¤ë¡£¤½¤ì¤æ¤¨¡¢




    spawn date

    sleep 20

    expect



¤Î¤è¤¦¤Ê Expect ¥×¥í¥°¥é¥à¤Ï¼ºÇÔ¤¹¤ë¡£¼ºÇÔ¤·¤Ê¤¤¤è¤¦¤ËÈóÂÐÏÃŪ¤Ê¥×¥í¥°¥é¥à¤Ç¤Ï spawn ¤»¤º¤Ë exec ¤¹¤ë¤³¤È¡£¤³¤¦¤¤¤¦¾õ¶·¤Ï¹Í¤¨¤é¤ì¤ë¤¬¡¢¼ÂºÝ¤Ë¤Ï»ä¤Ï¤Þ¤À¤½¤Î¾õÂÖ¤Ë ´Ù¤Ã¤¿¤³¤È¤¬¤Ê¤¤¡£¤Ä¤Þ¤ê¡¢¤³¤Î¸¶°ø¤ÇÂÐÏÃ¥×¥í¥°¥é¥à¤ÎºÇ¸å¤Î½ÐÎϤò ¼è¤ê¤³¤Ü¤¹¤È¤¤¤¦¾õÂ֤ˤʤ俤³¤È¤¬¤Ê¤¤¡£

°ìÊý¡¢Cray UNICOS ¤Î pty ¤ÏÆɤ߹þ¤ó¤Ç¤¤¤Ê¤¤½ÐÎϤò¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò ¥×¥í¥»¥¹¤¬ÊĤ¸¤ë¤È¤¹¤°¤ËÅꤲ¤Æ¤¯¤ë¡£»ä¤Ï Cray ¤Ë¤³¤ÎÆ°¤­¤Ë¤Ä¤¤¤ÆÊó¹ð¤·¡¢ ²óÈò¤¹¤ë¤¿¤á¤Î½¤Àµ¤ò¹Ô¤Ê¤Ã¤¿¡£

¥×¥í¥ó¥×¥È¤È±þÅú¤Î´Ö¤Ë¥Ç¥£¥ì¥¤¤¬É¬Íפʾì¹ç¤¬¤¢¤ë¡£tty ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤¬ UART ¤ÎÀßÄê¤òÊѤ¨¤¿¤ê¡¢¥¹¥¿¡¼¥È/¥¹¥È¥Ã¥×¥Ó¥Ã¥È¤òõ¤·¤Æ¥Ü¡¼¥ì¡¼¥È¤ò¹ç¤ï¤»¤Æ ¤¤¤ë»þ¤Ê¤É¤Ç¤¢¤ë¡£Ä̾¤³¤³¤ÇɬÍפȤµ¤ì¤Æ¤¤¤ë¤â¤Î¤Ï 1 Éä« 2 ÉäÎÂÔ¤Á¹ç¤ï¤»¤Ç¤¢¤ë¡£ ¤â¤Ã¤È¤·¤Ã¤«¤ê¤·¤¿¤ä¤êÊý¤Ï¥Ï¡¼¥É¥¦¥§¥¢¤¬ÆþÎϤò¼õ¤±¤ë½àÈ÷¤¬¤Ç¤­¤ë¤Þ¤Ç·«¤êÊÖ¤¹ ¤³¤È¤Ç¤¢¤ë¡£°Ê²¼¤ÎÎã¤Ï¡¢Î¾Êý¤ÎÀïά¤òºÎÍѤ·¤Æ¤¤¤ë¡£:




    send "speed 9600\r";

    sleep 1

    expect {

        timeout {send "\r"; exp_continue}

        $prompt

    }



-code ¤ò¥È¥é¥Ã¥×¤¹¤ë¤Î¤Ï Tcl ¤Î¥¤¥Ù¥ó¥È¥ë¡¼¥×¤Ë°Í¸¤·¤Æ¤¤¤ë¥³¥Þ¥ó¥É (sleep ¤Ê¤É)¤Ç¤ÏÆ°¤«¤Ê¤¤¡£ ÌäÂê¤Ï¡¢¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ÎÃæ¤Ç¤Ï Tcl ¤ÏÈóƱ´ü¥¤¥Ù¥ó¥È¥Ï¥ó¥É¥é¤«¤é¤Î ÊÖ¤êÃͤò¼Î¤Æ¤Æ¤¤¤ë¤«¤é¤Ç¤¢¤ë¡£ ²óÈòÊýË¡¤È¤·¤Æ¤Ï¡¢¥È¥é¥Ã¥×¥³¡¼¥É¤Ç¥Õ¥é¥°¤ò¥»¥Ã¥È¤·¡¢ ¥³¥Þ¥ó¥É(sleep ¤Ê¤É)¤Îľ¸å¤Ç¥Õ¥é¥°¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤³¤È¤Ç¤¢¤ë¡£

EXPECT ¥Ò¥ó¥È

Expect ¤Ë¤Ä¤¤¤Æ¡¢Ä¾´ÑŪ¤Ç¤Ê¤¤ÅÀ¤¬¾¯¤·¤¢¤ë¡£ ¤³¤Î¥»¥¯¥·¥ç¥ó¤Ç¤Ï¤½¤¦¤¤¤Ã¤¿¤³¤È¤Î»ØŦ¤È¤½¤ì¤ËÂФ¹¤ë¼¨º¶¤ò»î¤ß¤ë¡£

¶¦Ä̤Πexpect ¤ÎÌäÂê¤Ï¡¢¥·¥§¥ë¥×¥í¥ó¥×¥È¤òǧ¼±¤¹¤ëÊýË¡¤Ç¤¢¤ë¡£ ¤½¤ÎÀßÄê¤â¡¢¤½¤ì¤ò°·¤¦¿Í¤â¡¢»È¤¦¥·¥§¥ë¤â¤Þ¤Á¤Þ¤Á¤Ê¤Î¤Ç¡¢¼ÂºÝ¤Ë½Ð¤Æ¤¯¤ë ¥×¥í¥ó¥×¥È¤òÃΤ餺¤Ë¡¢ÈÆÍÑŪ¤Ë rlogin ¤ò¼«Æ°²½¤¹¤ë¤³¤È¤Ïº¤Æñ¤Ç¤¢¤ë¡£ ÂÅÅö¤ÊÀþ¤Ï¡¢¥æ¡¼¥¶¡¼¤Ë¥×¥í¥ó¥×¥È¤Ë¥Þ¥Ã¥Á¤¹¤ëÀµµ¬É½¸½(Æä˥ץí¥ó¥×¥È¤Î ½ª¤ê¤ÎÉôʬ)¤ò´Ä¶­ÊÑ¿ô EXPECT_PROMPT ¤ËÊݸ¤µ¤»¤ë¤³¤È¤Ç¤¢¤ë¡£ °Ê²¼¤Î¤è¤¦¤Ê¥³¡¼¥É¤Ç¤Ç¤­¤ë¡£ EXPECT_PROMPT ¤¬¤Ê¤¯¤Æ¤â¡¢¥³¡¼¥É¤ÏÀµ¤·¤¯Æ°¤¯²ÄǽÀ­¤¬¤¢¤ë¡£




    set prompt "(%|#|\\$) $"          ;# default prompt

    catch {set prompt $env(EXPECT_PROMPT)}



    expect -re $prompt



»ä¤È¤·¤Æ¤Ï¡¢¸«¤¨¤ë¤È»×¤Ã¤Æ¤¤¤ë¤â¤Î¤Î½ª¤ê¤ÎÉôʬ¤ò´Þ¤ó¤À expect ¥Ñ¥¿¡¼¥ó¤ò½ñ¤¯¤è¤¦¤Ë´«¤á¤ë¡£¤½¤¦¤¹¤ì¤Ð¡¢Á´ÂΤò¸«¤ëÁ°¤Ë±þÅú¤òÊÖ¤·¤Æ¤·¤Þ¤¦ ¤³¤È¤òÈò¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¤µ¤é¤Ë¡¢Á´ÂΤ¬¸«¤¨¤ëÁ°¤ËÅú¤¨¤ë¤³¤È¤â¤Ç¤­¤ë¤¬ ¤½¤Îʸ»ú¤Ï¼ÁÌä¤Ëº®¤¶¤Ã¤Æ echo ¤µ¤ì¤ë¡£¸À¤¤Âؤ¨¤ì¤Ð¡¢²ñÏäÏÀµ¾ï¤À¤¬¸«¤¿ÌÜ¤Ï º®¤¶¤Ã¤Æ¸«¤¨¤ë¡£

¤Û¤È¤ó¤É¤Î¥×¥í¥ó¥×¥È¤Î½ª¤ê¤Îʸ»ú¤Ï¥¹¥Ú¡¼¥¹¤Ç¤¢¤ë¡£Î㤨¤Ð¡¢ ftp¤«¤é¤Î¥×¥í¥ó¥×¥È¤Ï¡¢'f', 't', 'p', '>' ¤½¤·¤Æ <blank> ¤Ç¤¢¤ë¡£ ¤³¤Î¥×¥í¥ó¥×¥È¤Ë¥Þ¥Ã¥Á¤µ¤»¤ë¤Ë¤Ï¡¢¤³¤Îʸ»ú¤Î°ì¤Ä°ì¤Ä¤Ë¥Þ¥Ã¥Á¤·¤Ê¤±¤ì¤Ð ¤Ê¤é¤Ê¤¤¡£blank ¤ò´Þ¤á¤Ê¤¤¤Î¤Ï¡¢¤è¤¯¤¢¤ë¸í¤ê¤Ç¤¢¤ë¡£ÌÀ¼¨Åª¤Ë blank ¤ò Æþ¤ì¤ë¤è¤¦¤Ë¡£

X* ¤Î·Á¤Î¥Ñ¥¿¡¼¥ó¤ò»È¤¦¤Î¤Ç¤¢¤ì¤Ð¡¢* ¤ÏX¤«¤éºÇ¸å¤Ë¼õ¤±¤È¤ë²¿¤«¤Þ¤Ç¤Î Á´¤Æ¤Ë¥Þ¥Ã¥Á¤¹¤ë¡£¤³¤ì¤Ï°ì¸«Ä¾´ÑŪ¤À¤¬¡¢"ºÇ¸å¤Ë¼õ¤±¤È¤ë²¿¤«"¤¬ ¥³¥ó¥Ô¥å¡¼¥¿¤Î®Å٤ȥ«¡¼¥Í¥ë¤È¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Ë¤è¤ëI/O½èÍý¤Ë¤è¤Ã¤Æ ÊѤï¤Ã¤Æ¤·¤Þ¤¦¤Î¤Çº®Í𤹤ë¤À¤í¤¦¡£

Æäˡ¢¿Í´Ö¤Ï¥×¥í¥°¥é¥à¤Î½ÐÎϤ¬µðÂç¤Ê¤Ò¤È¤Þ¤È¤Þ¤ê¤È¤·¤Æ¤ä¤Ã¤Æ¤¯¤ë¤È»×¤¤¤¬¤Á ¤À¤¬¡¢¼ÂºÝ¤Ë¤Ï¡¢¤Û¤È¤ó¤É¤Î¥×¥í¥°¥é¥à¤Ï°ì¹Ô¤ò°ìÅÙ¤ËÁ÷¤ë¡£ ¤³¤¦²¾Äꤹ¤ë¤È¡¢Ä¾Á°¤ÎÃÊÍî¤Î¥Ñ¥¿¡¼¥ó¤Ë¤¢¤Ã¤¿ * ¤Ï¡¢¹Ô¤Î½ª¤ê¤Ë¤·¤« ¥Þ¥Ã¥Á¤·¤Ê¤¤¤«¤âÃΤì¤Ê¤¤¡£¤¿¤È¤¨¡¢¤â¤Ã¤ÈÆþÎϤ¬¤¢¤ë¤È»×¤ï¤ì¤ë¾ì¹ç¤Ç¤â ½ÐÎϤòÁ´¤Æ¼õ¤±¤È¤Ã¤¿»þÅÀ¤Ç¤·¤«¥Þ¥Ã¥Á¤ò¹Ô¤Ê¤ï¤Ê¤¤¤Î¤Ç¤¢¤ë¡£

expect ¤Ï¡¢»ØÄꤷ¤¿¥Ñ¥¿¡¼¥ó¤¬¶µ¤¨¤Æ¤¯¤ì¤Ê¤¤¸Â¤ê¡¢½ÐÎϤ¬¤µ¤é¤Ë¤ä¤Ã¤Æ¤¯¤ë¤Î¤« ¤É¤¦¤«¤ï¤«¤é¤Ê¤¤¡£

¹Ô»Ø¸þ¤Î¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ç¤¹¤é¡¢¸­¤¤¤ä¤êÊý¤È¤Ï¤¤¤¨¤Ê¤¤¡£ ¥×¥í¥°¥é¥à¤Ï¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤Î¥¿¥¤¥×¤ò¤á¤Ã¤¿¤ËÊݾڤ·¤Ê¤¤¤À¤±¤Ç¤Ê¤¯¡¢¤½¤ÎºÝ¤Ë ¾Ã²½ÉÔÎɤòµ¯¤³¤·¤Æ½ÐÎϹԤòÃæÃǤ·¡¢¹ÔËö¤ò¥Ð¥Ã¥Õ¥¡Ãæ¤Î¥é¥ó¥À¥à¤Ê°ÌÃÖ¤Ë ÃÖ¤¤¤Æ¤·¤Þ¤¦¡£ ¤½¤ì¤Ç¡¢¥Ñ¥¿¡¼¥ó¤ò½ñ¤¯»þ¤Ë¤Ï¡¢¥×¥í¥ó¥×¥È¤ÎºÇ¸å¤Î²¿Ê¸»ú¤«¤òÆþ¤ì¤Æ¤ª¤¤¤¿Êý¤¬ ¸­¤¤¤ä¤êÊý¤È¤¤¤¨¤ë¤Î¤Ç¤¢¤ë¡£

¥×¥í¥°¥é¥à¤ÎºÇ¸å¤Î½ÐÎϤˤ¢¤ë¥Ñ¥¿¡¼¥ó¤òÂÔ¤Á¡¢¼ÂºÝ¤Ë¤Ï²¿¤¬¤·¤«Â¾¤Î¤â¤Î¤¬ ȯ¹Ô¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï timeout ¥­¡¼¥ï¡¼¥É¤ÇȽÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£Íýͳ¤Ï¡¢ expect ¤¬¡¢¥¿¥¤¥à¥¢¥¦¥È¤·¤Ê¤¤ - ¤½¤Î¤«¤ï¤ê¤Ë eof ¤ò¸«¤Ä¤±¤é¤ì¤ë - ¤«¤é¤Ç¤¢¤ë¡£ Âå¤ï¤ê¤Ë¤Ê¤ë¤â¤Î¤ò»È¤¦¤³¤È¡£¤â¤Ã¤ÈÎɤ¤¤Î¤Ï¡¢Î¾Êý»È¤¦¤³¤È¤À¤í¤¦¡£ ¹Ô¤¬²ó¤ê¹þ¤ó¤À¾ì¹ç¤Ç¤â¡¢¹Ô¤½¤Î¤â¤Î¤òÊÔ½¸¤¹¤ë¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£

tty ¥É¥é¥¤¥Ð¤Ë¤è¤Ã¤Æ½ÐÎϤµ¤ì¤ë»þ¤Ë newline ¤Ï¡¢ÉáÄÌ carriage return, linefeed ¤ÎÁȤËÊÑ´¹¤µ¤ì¤ë¡£ ¤½¤ì¤Ç¡¢2 ¥é¥¤¥ó¤Ë¥Þ¥Ã¥Á¤¹¤ë¤Ë¤Ï¡¢Î㤨¤Ð¡¢printf("foo\nbar") ¤Ë ¥Þ¥Ã¥Á¤µ¤»¤ë¤Ë¤Ï¡¢"foo\r\nbar" ¤È¤¤¤¦¥Ñ¥¿¡¼¥ó¤ò»È¤¦¤³¤È¤Ë¤Ê¤ë¡£

»÷¤¿¤è¤¦¤ÊÊÑ´¹¤Ï¡¢¥æ¡¼¥¶¡¼¤«¤é expect_user ¤òÄ̤·¤ÆÆþÎϤòÆɤ߹þ¤à»þ¤Ë¤âµ¯¤³¤ë¡£¤³¤Î¾ì¹ç¡¢¥æ¡¼¥¶¡¼¤¬¥ê¥¿¡¼¥ó¤ò ²¡¤¹¤È¡¢¤½¤ì¤Ï newline ¤ËÊÑ´¹¤µ¤ì¤ë¡£¤½¤Î¸å¡¢ Expect ¤¬Ã¼Ëö¥â¡¼¥É¤ò raw ¥â¡¼¥É(telnet ¤Î¤è¤¦¤Ê)¤òÀßÄꤹ¤ë¤È¡¢ÌäÂ꤬ȯÀ¸¤¹¤ë ²ÄǽÀ­¤¬¤¢¤ë¡£¥×¥í¥°¥é¥à¤¬ËÜÅö¤Î¥ê¥¿¡¼¥ó¤òÂԤäƤ·¤Þ¤¦¤«¤é¤Ç¤¢¤ë¡£(¥×¥í¥°¥é¥à¤Î Ãæ¤Ë¤Ï¡¢newline ¤ò¥ê¥¿¡¼¥ó¤ËÊѤ¨¤Æ¤âÂç¾æÉפʤâ¤Î¤â¤¢¤ë¤¬¡¢¤Û¤È¤ó¤É¤Ï¤À¤á¤Ç¤¢¤ë¡£) »ÄÇ°¤Ê¤¬¤é¡¢¥×¥í¥°¥é¥à¤¬Ã¼Ëö¤ò raw ¥â¡¼¥É¤Ë¤¹¤ë¤³¤È¤ò¸¡½Ð¤¹¤ëÊýË¡¤¬¤Ê¤¤¡£

¼ê¤Ç newline ¤ò¥ê¥¿¡¼¥ó¤ËÊѤ¨¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢"stty raw"¤ò»È¤¦¤Î¤¬²ò·èºö¤Ç¤¢¤ë¡£ stty raw ¤Ï¡¢ÊÑ´¹¤òÄä»ß¤¹¤ë¡£¤·¤«¤·¡¢¤³¤¦¤¹¤ë¤È cooked ¥â¡¼¥É¤Î¹ÔÊÔ½¸µ¡Ç½¤¬ »È¤¨¤Ê¤¯¤Ê¤ë¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£

interact ¤Ï¡¢Ã¼Ëö¤ò raw ¥â¡¼¥É¤ËÀßÄꤹ¤ë¤Î¤Ç¡¢¤³¤ÎÌäÂê¤ÏȯÀ¸¤·¤Ê¤¤¡£

Expect ¥¹¥¯¥ê¥×¥È¤ÎÃæ¤Ç¥Ñ¥¹¥ï¡¼¥É(¤ä¾¤Îµ¡Ì©¾ðÊó)¤òÊݸ¤¹¤ë¤ÈÊØÍø¤Ê¤³¤È¤Ï ¤è¤¯¤¢¤ë¡£¤À¤ì¤«¤Î¥¢¥¯¥»¥¹¤ò¼õ¤±¤ë¤È¤½¤Î±Æ¶Á¤ò¼õ¤±¤Æ¤·¤Þ¤¦¥³¥ó¥Ô¥å¡¼¥¿¤Ç ¤½¤¦¤¤¤¦¤³¤È¤ò¤¹¤ë¤Î¤Ï´«¤á¤é¤ì¤Ê¤¤¡£¤½¤ì¤Ç¡¢¥Ñ¥¹¥ï¡¼¥É¤Î¥×¥í¥ó¥×¥È¤ò ¥¹¥¯¥ê¥×¥È¤«¤é½Ð¤¹¤Î¤¬¡¢Ê¸»úÄ̤ê¥Ñ¥¹¥ï¡¼¥É¤òËä¤á¹þ¤à¤è¤ê¤Ï¡¢Îɤ¤¹Í¤¨¤È ¤¤¤¨¤ë¡£¤È¤Ï¤¤¤¦¤â¤Î¤Î¡¢¤½¤¦¤¤¤Ã¤¿Ëä¤á¹þ¤ß¤ò¤¹¤ë¤·¤«¤Ê¤¤¾ì¹ç¤â¤¢¤ë¡£

ÉÔ¹¬¤Ê¤³¤È¤Ë¡¢UNIX ¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ï¡Ö¼Â¹Ô²Äǽ¤ÇÆɤá¤Ê¤¤¡×¥¹¥¯¥ê¥×¥È¤ò ºî¤ëľÀܤÎÊýË¡¤¬¤Ê¤¤¡£setgid ¥·¥§¥ë¥¹¥¯¥ê¥×¥È¤ò¥µ¥Ý¡¼¥È¤·¤¿¥·¥¹¥Æ¥à¤Ç¤Ï¡¢ ¼¡¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç´ÖÀÜŪ¤Ë¥·¥ß¥å¥ì¡¼¥È¤Ç¤­¤ë¡£

, Expect ¥¹¥¯¥ê¥×¥È(µ¡Ì©¾ðÊó¤ÎÆþ¤Ã¤¿)¤òÉáÄ̤˺î¤ë¡£ ¤½¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤ò 750 (-rwxr-x---) ¤ËÀßÄꤷ¡¢trusted group ¤Ä¤Þ¤ê¡¢Æɤó¤Ç¤âÎɤ¤¥°¥ë¡¼¥× ¤Î½êÍ­¤È¤¹¤ë¡£É¬Íפʤ顢¤³¤ÎÌÜŪ¤Î¤¿¤á¤Î ¿·¤·¤¤¥°¥ë¡¼¥×¤ò¤Ä¤¯¤ë¤³¤È¡£¼¡¤Ë¡¢/bin/sh ¥¹¥¯¥ê¥×¥È¤ò ¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó
 2751 (-rwxr-s--x) ¤Ç¡¢Æ±¤¸¥°¥ë¡¼¥×¤Î½êÍ­¤ÇºîÀ®¤¹¤ë¡£

¤³¤¦¤¹¤ë¤È¡¢¥·¥§¥ë¥¹¥¯¥ê¥×¥È¤Ï¤À¤ì¤«¤é¤â¼Â¹Ô¤Ç¤­(¤«¤Ä¡¢Æɤá)¤ë¡£ ¼Â¹Ô¤¹¤ë¤È¡¢¤½¤ì¤Ï Expect ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë¡£

´ØÏ¢¹àÌÜ

Tcl(3), libexpect(3)
"Exploring Expect: A Tcl-Based Toolkit for Automating Interactive Programs" by Don Libes, pp. 602, ISBN 1-56592-090-2, O'Reilly and Associates, 1995.
"expect: Curing Those Uncontrollable Fits of Interactivity" by Don Libes, Proceedings of the Summer 1990 USENIX Conference, Anaheim, California, June 11-15, 1990.
"Using expect to Automate System Administration Tasks" by Don Libes, Proceedings of the 1990 USENIX Large Installation Systems Administration Conference, Colorado Springs, Colorado, October 17-19, 1990.
"Tcl: An Embeddable Command Language" by John Ousterhout, Proceedings of the Winter 1990 USENIX Conference, Washington, D.C., January 22-26, 1990.
"expect: Scripts for Controlling Interactive Programs" by Don Libes, Computing Systems, Vol. 4, No. 2, University of California Press Journals, November 1991.
"Regression Testing and Conformance Testing Interactive Programs", by Don Libes, Proceedings of the Summer 1992 USENIX Conference, pp. 135-144, San Antonio, TX, June 12-15, 1992.
"Kibitz - Connecting Multiple Interactive Programs Together", by Don Libes, Software - Practice & Experience, John Wiley & Sons, West Sussex, England, Vol. 23, No. 5, May, 1993.
"A Debugger for Tcl Applications", by Don Libes, Proceedings of the 1993 Tcl/Tk Workshop, Berkeley, CA, June 10-11, 1993.

Ãø¼Ô

Don Libes, National Institute of Standards and Technology

¼Õ¼­

Tcl¤òÀ¸¤ß½Ð¤·¤¿ John Ousterhout ¤È¡¢¥¤¥ó¥¹¥Ô¥ì¡¼¥·¥ç¥ó¤òÍ¿¤¨¤Æ¤¯¤ì¤¿ Scott Paisley ¤Ë´¶¼Õ¤¹¤ë¡£ Expect ¤Î¥ª¡¼¥È¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¥³¡¼¥É¤Ë¤Ä¤¤¤Æ¡¢ Rob Savoye ¤Ë´¶¼Õ¤¹¤ë¡£

HISTORY ¥Õ¥¡¥¤¥ë¤Ë expect ¤Î¿Ê²½¤ÎÂçÉôʬ¤¬µ­½Ò¤µ¤ì¤Æ¤¤¤ë¡£¤³¤Î¥Õ¥¡¥¤¥ë¤ÏÌÌÇò¤¯Æɤá¤Æ¡¢¤«¤Ä¡¢ ¤¢¤Ê¤¿¤Î¤³¤Î¥½¥Õ¥È¥¦¥§¥¢¤Ø¤Îƶ»¡¤ò¤è¤ê¿¼¤¯¤¹¤ë¤À¤í¤¦¡£¤³¤Î¥Õ¥¡¥¤¥ë¤Ë ½ñ¤«¤ì¤Æ¤¤¤ë¡¢»ä¤Ë¥Ð¥°¥Õ¥£¥Ã¥¯¥¹¤òÁ÷¤Ã¤Æ¤¯¤ì¤¿¿Í¤¿¤Á¤ä¡¢Â¾¤Î±ç½õ¤ò ¤·¤Æ¤¯¤ì¤¿¿Í¤¿¤Á¤Ë´¶¼Õ¤¹¤ë¡£

Expect ¤ÎÀ߷פȼÂÁõ¤Ï¡¢ÉôʬŪ¤Ë¥¢¥á¥ê¥«À¯Éܤ«¤é¤½¤ÎÂвÁ¤ò¤â¤é¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢ ¥Ñ¥Ö¥ê¥Ã¥¯¥É¥á¥¤¥ó¤Ç¤¢¤ë¡£¤·¤«¤·¡¢¤³¤Î¥×¥í¥°¥é¥à¤È¥É¥­¥å¥á¥ó¥È¤¢¤ë¤¤¤Ï ¤½¤Î°ìÉô¤¬»È¤ï¤ì¤¿¤Ê¤é¡¢Ãø¼Ô¤È NIST ¤Ø¤Î¼Õ¼­¤ò½Ò¤Ù¤Æ¤â¤é¤¤¤¿¤¤¡£