stdout 上的二进制输出有什么用?

mus*_*usa 3 command-line stdout

一些程序直接在stdout. 这里有些例子:

tar -c file.png
dd  if=file.png
Run Code Online (Sandbox Code Playgroud)

嗯,我看到输出可以重定向到一个文件。但是这些程序已经接受输出文件名作为参数。因此,以下命令将给出相同的结果:

tar -c file.png  > file.tar
tar -c file.png -f file.tar

dd if=file.png  > copy.png
dd if=file.png of=copy.png
Run Code Online (Sandbox Code Playgroud)

二进制输出stdout可以用于什么其他目的?

use*_*686 7

显然,用于建造管道。最大的优点是您可以避免创建临时文件:

(对于本例,假定一个旧版本的tar不具有-J-I压缩选项。)

tar -c foo/*.png | xz -9 | uuencode "foo.tar.xz" | mail -s "Sending foo" musa
Run Code Online (Sandbox Code Playgroud)
  • 现在想象一下,如果您必须使用-f这些东西……您将拥有 VMS。

    tar -cf foo.tar foo/*.png
    xz -9 -o foo.tar.xz foo.tar 
    uuencode -o foo.uue foo.tar.xz 
    mail -a foo.uue -s "发送 foo" musa
    rm foo.tar foo.tar.xz foo.uue
    

您可以通过网络执行管道:

ssh storageserver "cd ~/foo && tar -c bar" | pv | tar -x

curl https://example.com/secret.gpg | ssh mylaptop "gpg --decrypt" > secret.zip
Run Code Online (Sandbox Code Playgroud)

更多例子:

curl http://i.imgur.com/L1aOt.jpg | display
Run Code Online (Sandbox Code Playgroud)

有时您甚至不需要将其通过管道传输到任何地方,即使输出是“二进制”。在 Xterm 上试试这个:

curl http://www.dim13.org/tek/teapot.tek         # Utah teapot
Run Code Online (Sandbox Code Playgroud)