将echo和file组合为命令的输入

时间:2014-05-10 09:18:05

标签: linux bash

我正在测试一些上传协议,并希望在一行中将输入参数作为回显发送,将文件作为上传信息发送。

示例:

echo -e 'upload\n<uploadid>\n' | nc 127.0.0.1 1567 < ~/test.txt

问题是我的回声被忽略 :(

知道如何将echo和文件组合作为命令的输入吗? (nc只是一个例子)

注意:将echo和文件写入另一个文件并不是一个更好的解决方案,因为我正在尝试测试流媒体的真实场景。复制上传文件会遗漏这一点。

2 个答案:

答案 0 :(得分:4)

只有一个标准输入,你不能同时管道和重定向。

创建完整输入,并通过管道发送:

(echo -e 'upload\n<uploadid>\n'; cat ~/test.txt) | nc 127.0.0.1 1567

答案 1 :(得分:2)

理论上,实现这一目标的最有效方法是使用此处的文档:

nc 127.0.0.1 1567 <<EOF
upload
<uploadid>
$(<test.txt)
EOF

这可以避免因使用管道或调用cat而导致的任何额外流程创建。