开发者

Running DOS command or batch file in tcl script in Windows 7 with ActiveTcl 8.5

The following is the tcl code.

#!/bin/sh
# \
exec tclsh "$0"  ${1+"$@"}

package require Expect
package require log
source [file join [info library] init.tcl]

set exp::winnt_debug 1

log::lvChannel debug stdout
log::log debug "debug msg ON\r"

set env(TERM) dumb

array set OPTS {
host    ""
user    &quo开发者_运维技巧t;"
passwd  ""
login   telnet
prompt  "(%|#|>|\\$) $"
ls      "/bin/ls -A1"
}

set xlpad "yahoo.com"

exec [auto_execok dir]

while {1} {
spawn ping  $xlpad
set loss 0
set replya 0
for { set pingc 0 } { $pingc < 3 } { incr pingc 1} {
    expect { 
        "timed out" {
            incr loss 1
            puts "intercepted time out message: $loss\n"
        }
        "Reply" {
            incr replya 1
        }    
    }
    if { $replya > 2 } {    
        break               
    }
   }            
break
}

return

I got the following messages:

couldn't execute "C:\Windows\System32\cmd.exe \c dir": no such file or directory
    while executing
"exec [auto_execok dir]"
    (file "mytst.tcl" line 35)

But the ping works ok.


auto_execok returns a list, which is passed to exec as a single argument. You need to expand the list:

exec {*}[auto_execok dir]

example:

% file mkdir tmp
% cd tmp
% close [open test w]
% exec [auto_execok dir]
couldn't execute "C:\WINNT\system32\cmd.exe \c dir": no such file or directory
% exec {*}[auto_execok dir]
 Volume in drive D is Data
 Volume Serial Number is ....

 Directory of d:\glennj\tmp

2011-09-30  10:08 AM    <DIR>          .
2011-09-30  10:08 AM    <DIR>          ..
2011-09-30  10:08 AM                 0 test
               1 File(s)              0 bytes
               2 Dir(s)  77,613,654,016 bytes free
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜