Не удается добавить данные в файл Tcl с помощью оператора ожидаемого - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать скрипт, который запускает программу, и когда эта программа запускается, она говорит, что либо БД уже запущена, либо Порт уже используется другим процессом (означает, что он уже запущен)

Если он уже запущен, я хочу создать оператор 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 Ответ

1 голос
/ 29 мая 2019

Проблема с этим утверждением:

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 становится очень мощным!

...