bash 重定向到文件不起作用

bash redirection to files not working

我有这两个文件,yolo.txtbar.txt:

yolo.txt:

a
b
c

bar.txt:

c

我有以下命令,它得到了我想要的输出:

$ cat yolo.txt bar.txt | sort | uniq -u | sponge
a
b

但是当我添加重定向 (>) 语句时,输出发生变化:

$ cat yolo.txt bar.txt | sort | uniq -u | sponge > yolo.txt && cat yolo.txt
c

我希望输出保持不变,但我很困惑。请帮助我。

> yolo.txt shell 重定向发生在任何命令 运行 之前。特别是,shell 打开 yolo.txt 用于写入 ,而 t运行 在执行 cat yolo.txt bar.txt 之前对其进行分类 。所以当 cat 打开 yolo.txt 时,yolo.txt 是空的。因此 bar.txt 中的 c 行是唯一的,所以 uniq -u 通过它。

我猜您想使用 sponge 来避免这个问题,因为这就是 sponge 的用途。但是你用错了。这是正确的用法:

cat yolo.txt bar.txt | sort | uniq -u | sponge yolo.txt && cat yolo.txt

请注意,我只是将输出文件名作为 command-line 参数传递给 sponge,而不是使用 shell 重定向。