Linux Expect Tutorial Примеры вопросов

Я изучаю, как использовать команду Linux - ожидайте после этого урока.

#!/usr/bin/expect

set timeout 20

spawn "./addition.pl"

expect "Enter the number1 :" { send "12\r" }
expect "Enter the number2 :" { send "23\r" }

interact

Может кто-нибудь здесь объяснить, что делает команда ниже.

spawn "./addition.pl" 

Кстати, я не могу найти файл с именем "./additon.pl", поэтому я не могу запустить пример успешно.

Я не знаю, как был написан этот Perl, но я представляю, что каким-то образом скрипт (как упоминал jvperrin, это может быть любой язык) должен читать из стандартного ввода и складывать их. Я использую Python, и я попытался написать adder.py.

#!/usr/bin/python 
import sys
print int(sys.argv[1]) + int(sys.argv[2])

но когда я меняю spawn "./add.py", он все равно не работает...

И ошибка выглядит так:

Traceback (most recent call last):
  File "./add.py", line 3, in <module>
    print int(sys.argv[1]) + int(sys.argv[2])
IndexError: list index out of range
expect: spawn id exp7 not open
    while executing
"expect "Enter the number2 :" { send "23\r" }"
    (file "./test" line 8)

2 ответа

Решение

По сути, Spawn запускает команду, поэтому вы можете использовать ее любым способом, которым будете пользоваться командой. Например, вы можете использовать его как spawn "cd .." или же spawn "ssh user@localhost" а не как spawn "./addition.pl",

В этом случае директива spawn запускает интерактивную Perl-программу в addition.pl и затем вводит два значения в программу после ее запуска.

Вот моя программа ruby, которая отлично работает с ожидаемым:

#!/usr/bin/ruby

print "Enter the number1 :"
inp1 = gets.chomp
print "Enter the number2 :"
inp2 = gets.chomp

puts inp1.to_i + inp2.to_i

Я написал программу на C, чтобы заменить add.pl.

      #include <stdio.h>

int main(int argc, char *argv[]){
    int a, b;
    printf("Enter the number1 :");
    scanf("%d", &a);
    printf("Enter the number2 :");
    scanf("%d", &b);
    printf("%d + %d = %d\n", a, b, a+b);
    return 0;
}

Необходим вызов двух функций printf. :)

Другие вопросы по тегам