首页 > 解决方案 > bash 在打开时真的会截断输出重定向文件吗?

问题描述

根据我的阅读,bash 应该在打开文件时截断文件。但是,在我运行命令后echo hello > file1 | ls > file1 > file2,有时 file1 包含“hello”,有时它不包含任何内容。这是一个非常奇怪的行为,我什至无法找出模式是什么,这似乎是偶然的。例如,这是我 bash 中几次尝试的结果,有时会删除之前的第一个输出文件,有时不会:

bash-3.2$ echo hello > output2 | ls > output2 > output3
bash-3.2$ cat output2
hello
bash-3.2$ rm output2
bash-3.2$ echo hello > output2 | ls > output2 > output3
bash-3.2$ cat output2
bash-3.2$ echo hello > output2 | ls > output2 > output3
bash-3.2$ cat output2
hello
bash-3.2$ rm output2
bash-3.2$ echo hello > output2 | ls > output2 > output3
bash-3.2$ cat ouput2
cat: ouput2: No such file or directory
bash-3.2$ cat output2
bash-3.2$ echo hello > output2 | ls > output2 > output3
bash-3.2$ cat output2
hello

我需要在 C 中重现 bash 行为,所以我真的需要看看这里的模式是什么,为什么文件有时会被截断,有时不会

编辑:我知道这个命令本身没有任何意义,我只需要使用任何命令在 C 中重现 bash 的行为,即使是最愚蠢的命令,所以我需要知道它在这里是如何工作的。我只是输入了一个易于理解的命令,没有上下文来说明我的问题

标签: bashpipestdoutio-redirection

解决方案


推荐阅读