何时使用输出重定向创建文件?

时间:2012-04-24 22:16:11

标签: filesystems ksh aix wc

我有一个在AIX ksh中运行的脚本,如下所示:

wc dir1/* dir2/* | {awk command to rearrange output} | {grep command to filter more} > dir2/output.txt

这一行的前提条件是dir2 / output.txt不存在。

问题是dir2 / output.txt已经包含在输出中(它发生了数百次,没有任何问题)。 dir1和dir2是NFS安装的。

它与wc的实现有关 - 如果第一个参数需要很长时间怎么办?我想不是,因为我尝试过以下方法:

wc `sleep 5` *.txt > out.txt

即使在这种情况下,out.txt也不会列出自己。

最后一点,本例中使用了通配符,它​​们在实际脚本中使用。因此,如果首先发生扩展,为什么会出现这个问题呢?

dir2 / output.txt实际创建的是什么时候?

1 个答案:

答案 0 :(得分:5)

重定向由shell完成,globs也是如此。您的问题是,在管道的情况下,每个管道阶段都是一个单独的子流程;执行最终重定向的shell子进程是否在构建wc的输入文件的整数之前运行将取决于调度程序和系统负载的细节,并且应该被认为是不确定的。

简而言之,您应该假设会发生这种情况并排除dir2/output.txt(请查看ksh扩展的glob模式;特别是dir2/!(output.txt)的某些内容可能是有用的)或在其他地方创建输出,然后mv将其创建到最终位置。