2012-03-08 75 views
0

测试命令行界面我想读取文件并将其内容发送到CLI。这可以很容易地与在读取文件和解释文件时显示输入和输出

cat file | ./my_program 

./my_program < file 

唯一的问题是它的输出来完成。这是

> command not found 
> command not found 
> 

,而不是

> a 
command not found 
> b 
command not found 
> quit 

时读取该文件包含三行

a 
b 
quit 

是否可以打印输入过,并输出移动到下一个线?

+0

请尝试在此处执行此操作吗?你是否想用名字my_program来执行你的脚本? – Teja 2012-03-08 14:19:53

+0

@Venk:是的,这是计划。我的系统上的 – sschaef 2012-03-08 15:02:20

回答

1

在某些平台上,你可以发球输入到/ dev/tty的:

 
< file tee /dev/tty | ./my_program 

注意,这会给你的输出,其中输入是不区分有一个提示:

 
a 
command not found 
b 
command not found 
quit 

但是你可以在前面加上所有$ PS2很轻松地输入线:

 
< file sed "s/^/$PS2/" | tee /dev/tty | sed "s/^$PS2//" | ./my_program 

(PS2默认到'>',如果PS2的内容包含任何正斜杠,则需要修改sed命令以使用未在PS2中出现的分隔符。)

+0

您的命令首先打印出文件的行,然后输出程序的输出。它们不会像您的示例中所示那样合并。 – sschaef 2012-03-08 15:01:21

+0

我认为问题在于您的程序正在写入stderr,所以交错受到缓冲的影响。要插入它们,只需通过2>&1将stderr重定向到stdout即可。 – 2012-03-08 15:21:01

+0

这没有任何改变。输出仍然是一样的。 – sschaef 2012-03-08 16:14:28