我正在学习如何使用 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)
Spawn 本质上将启动一个命令,因此您可以以任何方式使用它,就像命令一样。例如,您可以将其用作
spawn "cd .."
或 spawn "ssh user@localhost"
而不是 spawn "./addition.pl"
.
在这种情况下,spawn 指令在
addition.pl
中启动一个交互式 perl 程序,然后在程序启动后向程序输入两个值。
这是我的 ruby 程序,它可以与 expect 一起正常工作:
#!/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程序来代替addition.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 func 调用。 :)