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