无法使用Expect语句将数据添加到文件Tcl

时间:2019-05-29 09:17:11

标签: bash shell centos tcl

我正在尝试创建一个脚本并运行一个程序,当该程序运行时,它说DB已在运行或Port已被另一个进程使用(意味着已在运行)

如果它已经在运行,我希望创建一个if- else语句,并希望在文件中添加1(如果已经在运行,但是如果没有运行,则在文件中添加0)

这是我的tcl文件,名为test

    #!/usr/bin/expect -f
    set f [open a2.txt w]
    cd /opt/Uni-SON/
    spawn ./Aprogram start 
    expect {
       "Port is already being used by another process"

        puts $f 1
        puts "sadsadasdsaa"
    }

    puts $f 0

这是我的test2文件,是bash文件

#!/bin/bash
./test
value=$(<a2.txt)
rm -rf a2.txt
if [ $value -eq 0 ]
then
        echo Not being used
else
        echo Already Being used
fi

错误:它没有向文件中添加数据,但是如果我将完全相同的语句puts $f 1放在期望括号之外,它将起作用

怎么了?

我该怎么做?

1 个答案:

答案 0 :(得分:1)

此语句的问题:

expect {
   "Port is already being used by another process"

    puts $f 1
    puts "sadsadasdsaa"
}

是它触发了您需要等待一系列事情的情况。您可能要将其更改为:

expect {
    "Port is already being used by another process" {
        puts $f 1
        puts "sadsadasdsaa"
    }
}

这就是说,找到该消息后,执行与该消息关联的小脚本(两个puts调用)。您也可以一次等待几件事,这就是expect变得非常强大的地方了!