在PowerShell中执行以下命令后,在命令行上引用this教程时,它会进入无限循环。
echo "I am a new file." > ex15.txt
cat ex15.txt > another.txt
cat *.txt > bigfile.txt
在触发最后一个命令后,执行永远不会结束。它进入无限循环。但是在命令提示符下使用type命令可以正常工作。
type *.txt > bigfile.txt
此命令不会进入无限循环。这非常有效。为什么这不适用于PowerShell?
答案 0 :(得分:3)
Cat (Get-Content)
与cmd中的type
命令的工作方式不同。
Type
将不会看到正在写的bigfile.txt,但是Get-Content
会出现并且您最终会读取bigfile.txt并写入同一个文件,因此它会陷入循环
为了防止循环,你可以通过将cat表达式包装在parens中来强制cat在写入之前读完所有文件:
(cat *.txt) > bigfile.txt
答案 1 :(得分:1)
正如@mjolinor解释的那样,Get-Content
正在读取你正在添加到bigfile.txt的数据,就像写入它一样快,从而产生一个永远不会结束的命令。
最简单的解决方案是将bigfile.txt放入不同的目录中,因此它不是您正在阅读的文件之一。例如:父目录。
cat *.txt > ..\bigfile.txt
答案 2 :(得分:0)
另一种变体是从当前路径中要读取的文件中排除'bigfile.txt':
cat (ls *.txt -Exclude bigfile.txt) > bigfile.txt