将标准输入重定向到标准输出
Redirect stdin to stdout
假设我有一个简单的 C 程序,可以将 2 个数字相加:
#include <stdio.h>
int main(void) {
int a, b;
printf("Enter a: "); scanf("%d", &a);
printf("Enter b: "); scanf("%d", &b);
printf("a + b = %d\n", a + b);
return 0;
}
我没有在每次执行时都输入终端,而是将 a
和 b
的值输入到一个文件中:
// input.txt
10
20
然后我将 stdin
重定向到这个文件:
./a.out < input.txt
程序可以运行,但输出有点乱:
Enter a: Enter b: a + b = 30
有没有办法将 stdin 重定向到 stdout,这样输出就好像用户手动输入值一样,即:
Enter a: 10
Enter b: 20
a + b = 30
您可以为此使用 expect。 Expect 是一个用于自动化交互式命令行程序的工具。下面介绍了如何在以下位置自动输入这些值:
#!/usr/bin/expect
set timeout 20
spawn "./a.out"
expect "Enter a: " { send "10\r" }
expect "Enter b: " { send "20\r" }
interact
这会产生如下输出:
$ ./expect
spawn ./test
Enter a: 10
Enter b: 20
a + b = 30
还有更多例子here。
忘记提示;试试这个:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a, b;
if (scanf("%d%d", &a, &b) != 2) exit(EXIT_FAILURE);
printf("%d + %d = %d\n", a, b, a + b);
return 0;
}
您可能想找到一种方法让您的用户了解可执行文件的内容,也许是添加命令行选项?
$ echo "10 20" |./a.out
10 + 20 = 30
$ ./a.out --help
Program reads two integers and displays their sum
$
假设我有一个简单的 C 程序,可以将 2 个数字相加:
#include <stdio.h>
int main(void) {
int a, b;
printf("Enter a: "); scanf("%d", &a);
printf("Enter b: "); scanf("%d", &b);
printf("a + b = %d\n", a + b);
return 0;
}
我没有在每次执行时都输入终端,而是将 a
和 b
的值输入到一个文件中:
// input.txt
10
20
然后我将 stdin
重定向到这个文件:
./a.out < input.txt
程序可以运行,但输出有点乱:
Enter a: Enter b: a + b = 30
有没有办法将 stdin 重定向到 stdout,这样输出就好像用户手动输入值一样,即:
Enter a: 10
Enter b: 20
a + b = 30
您可以为此使用 expect。 Expect 是一个用于自动化交互式命令行程序的工具。下面介绍了如何在以下位置自动输入这些值:
#!/usr/bin/expect
set timeout 20
spawn "./a.out"
expect "Enter a: " { send "10\r" }
expect "Enter b: " { send "20\r" }
interact
这会产生如下输出:
$ ./expect
spawn ./test
Enter a: 10
Enter b: 20
a + b = 30
还有更多例子here。
忘记提示;试试这个:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a, b;
if (scanf("%d%d", &a, &b) != 2) exit(EXIT_FAILURE);
printf("%d + %d = %d\n", a, b, a + b);
return 0;
}
您可能想找到一种方法让您的用户了解可执行文件的内容,也许是添加命令行选项?
$ echo "10 20" |./a.out 10 + 20 = 30 $ ./a.out --help Program reads two integers and displays their sum $