这个shell命令做什么?

这个shell命令做什么?,shell,gnu,Shell,Gnu,我正在用另一种语言编写GNU的wc实用程序,我遇到了这个命令,它会导致wc输出0个字节 (dd ibs=99k skip=1 count=0;/wc-c)

我正在用另一种语言编写GNU的
wc
实用程序,我遇到了这个命令,它会导致wc输出0个字节

(dd ibs=99k skip=1 count=0;/wc-c)

据我目前了解,
dd
在一个单独的(子)shell中启动,然后
wc
启动,然后
/etc/group
的内容在shell中重定向


dd
命令使用99kB的输入块大小,并在读取输入之前跳过其中一个块?那就是我被绊倒的地方

现在我的版本报告读取了980字节,所以我想更好地理解这个命令,以便我的实用程序能够反映出来。

这个命令
(dd ibs=99k skip=1 count=0;/wc-c)
生成一个子shell(用于
(列表)
)并将
/etc/group
附加到该子shell标准输入

在该子外壳内运行
dd
命令(并继承子外壳的标准输入),输入块大小为
99k
跳过计数为1,块复制计数为0。这将导致
dd
在其标准输入流中查找
99k
,并停止。完成后,
wc
将运行(并继承子shell的标准输入),并报告流中剩余的要读取的字符数(除了庞大的组文件外,其他所有文件都将无效)


您的
wc
实现是否返回到文件句柄的开头?

dd
命令与
/etc/group
一起用作输入。对于这些参数,我们有一个
99k
的块文件,由于
ibs参数
跳过了1个
99k
块,然后复制了0个
99k
块。然后使用自定义命令
/wc-c
,并将该命令的结果作为输入。dd最终实现的是忽略一个
99k
块,然后将剩余的数据输入到自定义命令中

e、 g

$wc-c/etc/group
1011/etc/集团
$(dd ibs=500跳过=1计数=0;wc-c)

当然,通过自定义的
wc
命令,您会期望得到不同的结果。

注意,这取决于实现

在我的OS X上使用@nalipar的示例

$ wc -c /etc/group
    2317 /etc/group

$ gwc -c /etc/group #the GNU version of the wc
2317 /etc/group
系统默认值
wc

(dd ibs=500 skip=1 count=0; wc -c) < /etc/group
(dd ibs=500 skip=1 count=0; gwc -c) < /etc/group
0+0 records in
0+0 records out
0 bytes transferred in 0.000013 secs (0 bytes/sec)
1817
使用GNU
wc

(dd ibs=500 skip=1 count=0; wc -c) < /etc/group
(dd ibs=500 skip=1 count=0; gwc -c) < /etc/group
0+0 records in
0+0 records out
0 bytes transferred in 0.000013 secs (0 bytes/sec)
1817
(dd ibs=500跳过=1计数=0;gwc-c)
您的
/etc/group
文件有980字节大吗?我的wc实现没有。谢谢:)一旦我被允许,我会接受答案的。哦,奇怪的@jm666。(dd ibs=99k skip=1 count=0;wc-c)dd?(我一点也不确定dd应该在那里做什么,但我想它应该寻找并停止我看到的东西。)这很奇怪。我正在使用OS X。系统默认值
wc
返回2317,而
gwc
(GNU wc)返回0。真奇怪。@jm666下面是os x的wc实用程序: