我遇到了我认为是一个非常基本的脚本的问题,但事实证明它比我想象的要复杂得多。我想从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。
答案 0 :(得分:3)
如果你想接受STDIN并输出到一个文件,这很好用......
#!/usr/bin/bash
cat >file1
答案 1 :(得分:1)
echo
无法正确处理二进制数据。有关详细信息,请参阅this answer。如果你想做的不仅仅是简单的重定向,你可能最好使用像perl这样的脚本语言。