#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[512];
fgets(buf, 512, stdin);
system("/bin/sh");
}
编译cc main.c
我想要一个单行命令,它可以让这个程序在ls
不等待用户输入的情况下运行。
# This does not work - it prints nothing
(echo ; echo ls) | ./a.out
# This does work if you type ls manually
(echo ; cat) | ./a.out
我在想:
- 为什么第一个示例不起作用?
- 什么命令可以使程序运行
ls
而不更改源?
我的问题是外壳和操作系统无关,但我希望它至少在 bash 4 上工作。
编辑:
在测试答案时,我发现这是可行的。
(python -c "print ''" ; echo ls) | ./a.out
使用 strace:
$ (python -c "print ''" ; echo ls) | strace ./a.out
...
read(0, "\n", 4096)
...
这也有效:
(echo ; sleep 0.1; echo ls) | ./a.out
似乎缓冲被忽略了。这是由于比赛条件吗?