【问题标题】:How do I provide input to a C program from bash? [duplicate]如何从 bash 向 C 程序提供输入? [复制]
【发布时间】:2013-05-12 15:17:37
【问题描述】:

我已经阅读了大量有关 bash 脚本和程序测试的内容,但我仍然无法使这段代码工作。

基本上它是一个简单的程序,询问用户northeastsouthwest。我启动程序,然后它立即要求输入。我只是无法让 bash 脚本给它任何输入。我尝试使用echoexpect

感谢任何帮助。

这是用于获取玩家输入的函数:

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'

【问题讨论】:

  • 你想做什么?创建 C 程序或 bash 脚本?
  • 您是否尝试通过bash script 将输入发送到c program
  • 我真的不明白你想要/问什么,看来我并不孤单。
  • 是的,我正在尝试使用 bash 脚本将输入发送到该程序。
  • @blankwall 显示您在 bash 脚本中做了什么?在 bash 中输入它很容易 ALSO 在 C 中显示你的 main()

标签: c bash


【解决方案1】:

您可以使用以下任何机制将输入从 bash 输入到程序中。

对于单行输入,您可以使用 here-string

./ex17 <<<'w'

对于多行,您可以使用 here-document

./ex17 <<'EOF'
w
second line of input
more input
EOF

或者您可以将这些行移出脚本并放入单独的文件中:

./ex17 <filename    

更一般地说,您可以运行一个命令,该命令生成程序所需的输入作为其输出,然后用 管道 将它们连接在一起。比如上面的也可以写成:

cat filename | ./ex17

或原来的例子为

echo w | ./ex17

这更通用,因为您可以在这里用任何类型的程序替换 catecho,这些程序可以进行各种计算以确定它输出的内容,而不仅仅是转储静态字符串或文件的内容。

但是您无法通过 bash 轻松完成的是驱动输入、读取输出以及决定将什么作为下一个输入发送。为此,您应该查看expect。一个期望脚本看起来像这样:

#!/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

【讨论】:

    【解决方案2】:

    试试这个:首先:

     echo w | ./ex17 
    

    这会将 w 发送到示例并输出移动。这称为管道;它本质上将 echo 的 stdout 连接到 ex17 的 stdin

    【讨论】:

      【解决方案3】:

      您可以使用C 代码或Bash 脚本,而不是混合使用。 使用 scanf() 从键盘读取(当您按 ENTER 时它将停止读取)并以 C 语言完成此代码。

      【讨论】:

      • 他试图将来自 bash 的输入输入到他的 C 程序中,这是完全可能的
      猜你喜欢
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多