是的,你可以,但这并不常见。
例如,这是完全合法的(我输入了 " Hello, world.
", then Enter, then Ctrl-D)。
$ gzip > input.gz
Hello, world.
$ ls -l input.gz
-rw-r--r-- 1 kst kst 34 Oct 5 23:18 input.gz
$ gzip -d < input.gz
Hello, world.
(压缩文件实际上比输入大;这对于非常小的输入很常见。)
但请记住,标准输入不一定来自键盘。例如,该du
命令打印磁盘使用情况的摘要,如果在大目录上运行它会生成大量输出。如果您想直接以压缩形式保存输出,您可以键入:
du -a / | gzip > du-a.out.gz
命令的标准输入gzip
来自命令的输出du -a /
;其标准输出被写入新文件du-a.out.gz
。
该tar
命令是另一个常见示例:
tar cf - some_dir | gzip > some_dir.tar.gz
(但许多版本tar
都可以选择执行此操作,而无需显式调用gzip
命令)。
至于你问题的最后一部分:
此外,当我在终端中键入 gzip -f 时,光标会转到换行符并开始接受输入,但我只需 Ctrl+C 将其退出,然后什么也没有发生。
键入会Ctrl-C杀死gzip
进程,并且可能不允许它完成写入输出。您需要键入Ctrl-D以触发文件结束条件;这让gzip -f
命令正常完成。但是您通常不想这样做;它将压缩输出写入您的终端,其中可能包含可能会弄乱您的终端设置的控制字符。