использование переменных в сценарии ожидания - PullRequest
1 голос
/ 13 июля 2020

Текст attribute.csv "собака", "6" «кот», «3» «mikeymouse», «10»

firstScript.sh
#!/bin/bash
echo "Start Say"
read a
while((1))
do
    echo -n "Master: "
    read animal
    if [[ $animal = "dog" ]];then
        echo "Age: 6"
    elif [[ $animal = "cat" ]];then
        echo "Age: 3"
    elif [[ $animal = "mikeymouse" ]];then
        echo "Age: 10"
    fi
done

secondScript.sh
#!/bin/bash
export line=`wc -l ~/Desktop/attribute.csv | awk {'print $1'}`
expect -c '
    set timeout 3
    spawn /Users/dog/Desktop/firstScript.sh
    expect {
        "Start Say" {send "\r";exp_continue}
        "Master: " {
            for {set i 1} {$i<=$env(line)} {incr i} {
                send [exec bash -c {awk -F '\''"'\'' {'\''print $2'\''} ~/Desktop/attribute.csv | sed -n "$i"p}]\r
            }
            interact
        }
        timeout {puts "\nTimeout";exit 0}
    }
'
echo ""

фактический результат : $ /Users/dog/Desktop/secondScript.sh spawn /Users/dog/Desktop/firstScript.sh Начать Сказать

Хозяин: собака кошка микрофонная мышь Возраст: 6 Мастер: Возраст: 3 Мастер: Возраст: 10 Мастер: собака кошка микрофонная мышь Возраст: 6 Мастер: Возраст: 3 Мастер: Возраст: 10 Мастер:

$

Проблема в том, что я не могу получить ожидаемый результат, как показано ниже: $ /Users/dog/Desktop/secondScript.sh spawn /Users/dog/Desktop/firstScript.sh Start Say

Хозяин: собака Возраст: 6 Мастер: кошка Возраст: 3 года Мастер: mikeymouse Возраст: 10 Мастер:

1 Ответ

0 голосов
/ 14 июля 2020
  1. смешивание ожидаемого в сценарии оболочки, лучше всего использовать heredo в кавычках c, чтобы не цитировать ад
  2. вам не нужно исполнять c в awk и sed, Tcl может легко прочитать файл.
  3. одинарные кавычки не имеют особого значения в Tcl, используйте вместо них фигурные скобки.
  4. CSV может быть на удивление сложным для правильного понимания, используйте хорошо протестированную библиотеку.
  5. умно использовать среду для передачи данных в ожидание.
#!/bin/bash
export csv=$HOME/Desktop/attribute.csv
expect <<'END_EXPECT'
    # from tcllib
    package require csv

    set fh [open $env(csv) r]
    while {[gets $fh line] != -1} {
        lappend animals [lindex [csv::split $line] 0]
    }
    close $fh

    set timeout 3
    set idx -1

    spawn $env(HOME)/Desktop/firstScript.sh
    expect {
        "Start Say" {send "\r"; exp_continue}
        "Master: " {
            if {[incr idx] == [llength $animals]} {
                exit
            }
            send "[lindex $animals $idx]\r"
            exp_continue
        }
        timeout    {puts "\nTimeout";exit}
    }
END_EXPECT
echo ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...