如何从 bash 向 C 程序提供输入? [复制]

2024-01-12

我已经阅读了大量有关 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(使用前将#替换为@)

如何从 bash 向 C 程序提供输入? [复制] 的相关文章

随机推荐