如何使用 Shell 脚本在新终端中发送输入

如何使用 Shell 脚本在新终端中发送输入

我发现了如何使用 Shell 脚本自动将输入发送到 C 程序。例如,如果我编译这个 C 程序:

//test.c
int main()
}
    int x;
    printf("Please enter an integer:");
    scanf("%d", &x);
  printf("\nYou entered %d\n", x);
}

并编写这个脚本:

#!/bin/bash
./test << EOF
5
EOF

并打开终端并运行脚本我将得到以下输出:

Please enter an integer:
You entered 5

现在,我想在新终端上运行测试,我发现可以使用此命令来执行此操作:
gnome-terminal -x ./test
问题是,如果我尝试在脚本中同时执行这两项操作(在新终端上运行测试并自动发送输入),它不起作用,输入不会在新终端上发送,您只需像平常一样自己提供。

我做错了什么以及如何解决这个问题?

PS 抱歉,如果格式有点混乱,我尝试过。

答案1

如果您使用 shell 脚本而不是二进制文件,它将起作用。

$ ~/tmp/term_test$ cat ./test_wrapper.sh 
#!/bin/bash 
./test << EOF
5 
EOF
read dummy
$ gnome-terminal -x  ./test_wrapper.sh 
$ 

我添加的“read dummy”行将阻止终端在脚本完成时立即关闭。

您确定需要打开一个新的终端会话吗?

答案2

我想我已经找到了一种方法来实现你想要的,但我想你会想了解重定向以避免相当混乱的输出。

我使用作业控制(& - 在后台运行)能够同时运行 2 个实例。有关更多详细信息,请参阅 bash 手册页。您还可以在那里找到有关重定向的报道。

我为你的 C 示例添加了一个睡眠,这样它就不会立即终止。 michael@bunchan:~/tmp/term_test$ 回声 5 | ./test 请输入一个整数:您输入了 5 michael@bunchan:~/tmp/term_test$ echo 99999 | ./test 请输入一个整数:您输入了 99999 michael@bunchan:~/tmp/term_test$

michael@bunchan:~/tmp/term_test$ 
$ cat test.c 
//test.c 

#include <stdio.h>
#include <unistd.h>

int main()
{ 
    int x;
    sleep(10);
    printf("Please enter an integer:");
    scanf("%d", &x); printf("\nYou entered %d\n", x);
}
$ ./test & << EOF
> 999
> EOF
[1] 10638
$ ./test & << EOF
5  
EOF

[2] 10639
$ jobsPlease enter an integer:
[1]+  Stopped                 ./test
[2]-  Running                 ./test &
$ Please enter an integer:jobs
[1]-  Stopped                 ./test
[2]+  Stopped                 ./test
$ 

答案3

这是对您原来问题的更好答案,使用管道而不是重定向。

$ echo 5 | ./test
Please enter an integer:
You entered 5
$ echo 99999 | ./test
Please enter an integer:
You entered 99999
$ 

相关内容