0

在什么情况下 a wc -linbg不会返回?

尤其是下面的情况

我在 shell 脚本中有一个类似于下面的片段,

file_name=my_file_name.xyz

在一个循环中,

wc -l ${file_name}& bg_pid=$!

在另一个循环中,

wait ${bg_pid}

我实际上有一个 file_names 数组,我将wc -lfor each 放在后台,并将wait它们pid放在另一个循环中。

wc -l在前台完成时在这些文件上完成。但是,wc -l放入时不返回bg


其实我想做

count[i]=`wc -l ${file_name[i]}` & bg_pid=$!

这也行不通,因为 bg 进程无法以这种方式返回值(而且我不想写入文件)

4

2 回答 2

2

要在帖子顶部回答您的问题,当 wc 的输入流不提供文件结尾时,后台的“wc -l”将不会返回,因此如果您这样做,例如:

cat - | wc -l

然后不要输入任何内容。

于 2013-11-29T12:26:51.710 回答
1

好的,所以您想知道为什么您的代码 wc -l可能不会返回,对吧?考虑这个命令:

wc -l ${file_name}

如果${file_name}计算结果为空字符串,那么您正在运行:

wc -l

一直读到stdin结束stdin。如果没有任何东西正在关闭wcstdin那么wc将等待,等待......等待......

于 2013-11-29T12:32:50.500 回答