我想对我的一个脚本进行自动测试,这里的文档几乎完美无缺。但是,如果能够将 STDIN 复制到 STDOUT,那么就像在将这里的文档推送到脚本时输入一样(查看每次运行时的输入),那就太好了。这容易做到吗?
我目前有(不显示用户输入和看到的输入,只显示输出):
#!/bin/sh
make && ./proj <<- EOF
i
3
i
9
i
55
i
345
t
s
33
s
455
i
44
i
99
t
q
EOF
答案1
您可以用 复制它tee
,然后使用 fd3 将它潜入您的脚本中,如下所示:
{ make && tee /dev/fd/3 <<EOF | ./proj
1
3
i
9
EOF
} 3>&1
...但除了我测试过的 bash 版本之外,我不会相信任何其他东西会以相同的方式解析它。Darth 建议使用临时文件,或者如果没有太多输入,您可以使用变量做同样的事情:
input='1
3
i
9'
make && echo "$input" && echo "$input" | ./proj
...尽管这也可能会在一些无法处理变量值中的换行符的 shell 上中断。
答案2
你要cat
。
答案3
您还可以使用重定向。将测试输入保存到test.txt
,然后make && ./proj < test.txt