假设我想删除目录中除名为“notes.txt”的文件之外的所有文件。我会用管道来做到这一点,ls | grep -v "notes.txt" | xargs rm. 如果第二个管道的输出是 rm 应该使用的输入,为什么我需要 xargs?
为了进行比较,管道echo "#include <knowledge.h>" | cat > foo.c将回显的文本插入到文件中,而不使用 xargs。这两个管道有什么区别?
为什么将文件的输出重定向到自身会产生一个空白文件?
在 Bash 中说明,为什么
less foo.txt > foo.txt
Run Code Online (Sandbox Code Playgroud)
和
fold foo.txt > foo.txt
Run Code Online (Sandbox Code Playgroud)
产生空foo.txt?由于诸如此类的附加less eggs.py >> eggs.py会生成 中文本的两个副本,因此eggs.py人们可能会期望覆盖会生成文本的一个副本。
请注意,我并不是说这是一个错误,它更可能是指向有关 Unix 的深层内容的指针。