运行在后台的shell命令,在TCL PROC(Running shell commands in

2019-10-17 12:36发布

我试图创建一个TCL PROC,这是通过一个shell命令作为参数,然后打开一个临时文件,写入一个格式化字符串到临时文件,然后运行在后台的shell命令和存储输出到临时文件为好。

在后台运行的命令,是为了让PROC可随即与传递给它的另一个ARG调用,写入到另一个文件。 所以运行一百年这样的命令不应该采取只要运行它们串联会做。 多个临时文件终于可以连接成一个文件。

这是我想要做的伪代码。

proc runthis { args }  
{ 
    set date_str [ exec date {+%Y%m%d-%H%M%S} ]
    set tempFile ${date_str}.txt
    set output [ open $tempFile a+ ]
    set command [concat exec $args]
    puts $output "### Running $args ... ###"   

    << Run the command in background and store output to tempFile >>
}

但我怎么确保任务的background'ing做得好? 需要做,以确保多个临时文件得到正确关闭怎么办?

任何帮助将受到欢迎。 我在TCL新发现让我的脑海里解决这个问题。 我读了关于TCL使用线程,但我用的是旧版本的TCL不支持线程工作。

Answer 1:

怎么样:

proc runthis { args }  { 
    set date_str [clock format [clock seconds] -format {+%Y%m%d-%H%M%S}]
    set tempFile ${date_str}.txt
    set output [ open $tempFile a+ ]
    puts $output "### Running $args ... ###"   
    close $output

    exec {*}$args >> $tempFile &
}

见http://tcl.tk/man/tcl8.5/TclCmd/exec.htm

因为你似乎有一个旧的TCL,更换

    exec {*}$args >> $tempFile &

    eval exec [linsert $args 0 exec] >> $tempFile &


文章来源: Running shell commands in background, in a tcl proc