gpt4 book ai didi

filesystems - 使用输出重定向时什么时候创建文件?

转载 作者:行者123 更新时间:2023-12-02 05:45:40 25 4
gpt4 key购买 nike

我有一个在 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 是在什么时候实际创建的?

最佳答案

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

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

关于filesystems - 使用输出重定向时什么时候创建文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com