我已经阅读了大量有关 bash 脚本和程序测试的内容,但我仍然无法使这段代码工作。
基本上,它是一个简单的程序,要求用户提供以下任一信息north
east
south
or west
。我启动该程序,然后它立即要求输入。我只是无法让 bash 脚本为其提供任何输入。我尝试使用echo
and expect
.
任何帮助表示赞赏。
这是用于获取玩家输入的函数:
int process_input(Map *game)
{
printf("\n> ");
char ch = getchar();
char a = getchar(); //eat enter
int damage = rand() % 4;
switch(ch) {
case -1:
printf("you suck\n");
return 0;
break;
case 'n':
game->proto.move(game, NORTH);
break;
case 's':
game->_(move)(game, SOUTH);
break;
case 'e':
game->_(move)(game, EAST);
break;
case 'w':
game->_(move)(game, WEST);
break;
case 'a':
game->_(attack)(game, damage);
break;
case 'l':
printf("You can go:\n");
if(game->location->north) printf("NORTH\n");
if(game->location->south) printf("SOUTH\n");
if(game->location->east) printf("EAST\n");
if(game->location->west) printf("WEST\n");
break;
default:
printf("Whats next?", ch);
}
return 1;
}
这是对 bash 脚本的尝试:
#!/bin/bash
/Desktop/c
./ex17 echo 'w'
您可以使用以下任一机制将输入从 bash 馈送到程序中。
对于单行输入,您可以使用这里的字符串:
./ex17 <<<'w'
对于多行,您可以使用此处文档:
./ex17 <<'EOF'
w
second line of input
more input
EOF
或者您可以将这些行从脚本中移出并放入单独的文件中:
./ex17 <filename
更一般地,您可以运行一个命令,生成程序所需的输入作为其输出,并将它们与pipe。例如,上式也可以写成:
cat filename | ./ex17
或原始示例为
echo w | ./ex17
这更通用,因为你可以替换cat
and echo
这里使用任何类型的程序,它可以进行各种计算以确定其输出的内容,而不仅仅是转储静态字符串或文件的内容。
但是从 bash 中您无法轻松完成的事情是驱动输入、读取输出并决定发送什么内容作为下一个输入。为此,你应该看看expect http://expect.sourceforge.net/。一个期望脚本看起来像这样:
#!/usr/bin/env expect
spawn ./ex17
expect ">"
send "w\n"
expect "Whats next?"
send "next line here\n"
# turn it back over to interactive user
interact
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)