背景中的wc不会返回

时间:2013-11-29 12:20:42

标签: bash shell background wc

wc -l中的bg在什么情况下不会返回?

特别是以下情况

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

file_name=my_file_name.xyz

在一个循环中,

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

在另一个循环中,

wait ${bg_pid}

我实际上有一个file_names数组,我在背景中为wc -l添加pid,在另一个循环中将wc -l放在wc -l上。

这些文件在前台完成时

bg完成。但是,count[i]=`wc -l ${file_name[i]}` & bg_pid=$!

时,{{1}}不会返回

其实我想做

{{1}}

这不起作用导致bg进程无法以这种方式返回值(并且我不想写入文件)

2 个答案:

答案 0 :(得分:2)

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

cat - | wc -l

然后不要输入任何内容。

答案 1 :(得分:1)

好的,所以你想知道为什么代码 wc -l中的可能无法返回,对吧?请考虑以下命令:

wc -l ${file_name}

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

wc -l

stdin结束之前读取stdin。如果没有任何内容正在关闭wc的{​​{1}},则stdin将等待,等待....等待......