为什么要在 "bzip2" 这样的程序中使用“< /dev/null”?
Why Using "< /dev/null" with a program like "bzip2"?
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,7-
我在LFS书上看到这段代码,< /dev/null
那里的目的是什么?
我知道 < /dev/null
用于通过发送零来防止程序等待输入,但是这里有必要吗?
短语 < /dev/null
是 bzip2 的 stdin。很可能,过去需要 或 只是一种很好的做法来说明每个标准流,而且作者已经足够大了,仍然可以这样做。三个标准流是 stdin
、stdout
和 stderr
,所有都在这里使用。
我个人会做 bzip2 --version 2>&1 | head -n1 | cut -d" " -f1,7-
因为 bzip2 --version
不会因为缺少 stdin
.
而失败
它可能只是 LFS 所需要的。 Ubuntu.
不需要
是的,这是必要的。
从当前版本 1.0.8 开始,bzip2 --version
将打印版本信息,但也会继续压缩 stdin
:
$ ./bzip2 --version
bzip2, a block-sorting file compressor. Version 1.0.8, 13-Jul-2019.
Copyright (C) 1996-2019 by Julian Seward.
This program is free software; [...]
bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.
当另外通过 head
进行管道传输时,它只会挂起,等待标准输入上的数据。 < /dev/null
通过提供一个它可以压缩的零长度文件来防止这种情况。 (这确实在输出的末尾添加了一些二进制垃圾,但是它被 head
过滤掉了所以没关系)。
Debian(及其下游 Ubuntu)将 patch this out,使得 < /dev/null
变得不必要:
@@ -1916,8 +1918,8 @@ IntNative main ( IntNative argc, Char *a
if (ISFLAG("--keep")) keepInputFiles = True; else
if (ISFLAG("--small")) smallMode = True; else
if (ISFLAG("--quiet")) noisy = False; else
- if (ISFLAG("--version")) license(); else
- if (ISFLAG("--license")) license(); else
+ if (ISFLAG("--version")) { license(); exit ( 0 ); } else
+ if (ISFLAG("--license")) { license(); exit ( 0 ); } else
if (ISFLAG("--exponential")) workFactor = 1; else
if (ISFLAG("--repetitive-best")) redundant(aa->name); else
if (ISFLAG("--repetitive-fast")) redundant(aa->name); else
但显然,Linux From Scratch 不会受益于任何特定于发行版的补丁。
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,7-
我在LFS书上看到这段代码,< /dev/null
那里的目的是什么?
我知道 < /dev/null
用于通过发送零来防止程序等待输入,但是这里有必要吗?
短语 < /dev/null
是 bzip2 的 stdin。很可能,过去需要 或 只是一种很好的做法来说明每个标准流,而且作者已经足够大了,仍然可以这样做。三个标准流是 stdin
、stdout
和 stderr
,所有都在这里使用。
我个人会做 bzip2 --version 2>&1 | head -n1 | cut -d" " -f1,7-
因为 bzip2 --version
不会因为缺少 stdin
.
它可能只是 LFS 所需要的。 Ubuntu.
不需要是的,这是必要的。
从当前版本 1.0.8 开始,bzip2 --version
将打印版本信息,但也会继续压缩 stdin
:
$ ./bzip2 --version
bzip2, a block-sorting file compressor. Version 1.0.8, 13-Jul-2019.
Copyright (C) 1996-2019 by Julian Seward.
This program is free software; [...]
bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.
当另外通过 head
进行管道传输时,它只会挂起,等待标准输入上的数据。 < /dev/null
通过提供一个它可以压缩的零长度文件来防止这种情况。 (这确实在输出的末尾添加了一些二进制垃圾,但是它被 head
过滤掉了所以没关系)。
Debian(及其下游 Ubuntu)将 patch this out,使得 < /dev/null
变得不必要:
@@ -1916,8 +1918,8 @@ IntNative main ( IntNative argc, Char *a
if (ISFLAG("--keep")) keepInputFiles = True; else
if (ISFLAG("--small")) smallMode = True; else
if (ISFLAG("--quiet")) noisy = False; else
- if (ISFLAG("--version")) license(); else
- if (ISFLAG("--license")) license(); else
+ if (ISFLAG("--version")) { license(); exit ( 0 ); } else
+ if (ISFLAG("--license")) { license(); exit ( 0 ); } else
if (ISFLAG("--exponential")) workFactor = 1; else
if (ISFLAG("--repetitive-best")) redundant(aa->name); else
if (ISFLAG("--repetitive-fast")) redundant(aa->name); else
但显然,Linux From Scratch 不会受益于任何特定于发行版的补丁。