从STDIN读取并输出到文件

时间:2015-04-04 17:58:15

标签: bash

我遇到了我认为是一个非常基本的脚本的问题,但事实证明它比我想象的要复杂得多。我想从STDIN读取数据,然后将数据写入文件。

经过多次讨论,我有一个 kindof 的剧本;它似乎适用于文本文件(至少MD5总和匹配),但如果您尝试使用JPEG图像,则会创建一个不可解析的文件。

# Start with a clean slate
rm file1

# http://unix.stackexchange.com/q/194388/5769
IFS=

#while read -r -N 8192 data; do
while read -r -N 40 data; do  # Reduced bytesize for debugging
    echo -n "$data" >> file1
done;

# Some data still remains because of how 'read' uses exit codes
echo -n "$data" >> file1

用法*:

$ curl -s "http://loripsum.net/api/plaintext/5/" | ./save.sh  # Sucess
$ curl -s "http://lorempixel.com/400/200/food/"  | ./save.sh  # Failure: No error messages, but the file can't be opened with an image viewer

我的代码出了什么问题,为什么它对二进制文件不起作用?


* 是的,在此示例中,我可以使用>将数据直接重定向到文件,但我最终使用此代码来保存POST数据从busybox的httpd到STDIN。

的HTTP表单

2 个答案:

答案 0 :(得分:3)

如果你想接受STDIN并输出到一个文件,这很好用......

#!/usr/bin/bash
cat >file1

答案 1 :(得分:1)

echo无法正确处理二进制数据。有关详细信息,请参阅this answer。如果你想做的不仅仅是简单的重定向,你可能最好使用像perl这样的脚本语言。