此处记录 - 将 stdin 复制到 stdout?

此处记录 - 将 stdin 复制到 stdout?

我想对我的一个脚本进行自动测试,这里的文档几乎完美无缺。但是,如果能够将 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

相关内容