最近,我试图列出我拥有的目录(数百个)中的所有图像,并将它们放入文件中。我用了一个非常简单的命令
ls > "image_names.txt"
我很无聊,决定浏览文件内部,意识到 image_names.txt 位于文件中。然后我意识到,执行的操作顺序不是我所想的。我分两个步骤从左至右阅读该命令:
ls
(首先列出所有文件名) > "image_names.txt"
(然后创建此文件并将其通过管道传输到此处) 为什么先创建文件{strong> ,然后列出目录中的所有文件,尽管首先发出ls
命令?
答案 0 :(得分:2)
使用输出重定向时,shell需要一个放置输出的位置(假设它很长,那么在终止时可能会丢失所有内容,或者耗尽所有工作内存),因此第一步是打开输出文件,用于从执行的命令的标准输出中流式输出。
了解这种命令特别重要
cat a.txt | grep "foo" > a.txt
由于a首先打开而不处于附加模式,它将被截断,这意味着cat
没有输入。因此,您期望的行为是不会从a.txt中过滤掉行并替换a.txt。相反,您只会丢失a.txt
的内容。