bash 重定向到文件不起作用
bash redirection to files not working
我有这两个文件,yolo.txt
和 bar.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 重定向。
我有这两个文件,yolo.txt
和 bar.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 重定向。