shell命令中“>”和“ >>”之间有什么区别?


Answers:


48

>用于覆盖(“ 破坏 ”)文件,>>并用于附加到文件。

因此,当您使用时ps aux > file,的输出ps aux将被写入,file并且如果file已经存在一个名为的文件,其内容将被覆盖。

如果你使用ps aux >> file的输出ps aux将被写入file,如果指定的文件file已经存在,现在,该文件将包含以前的内容和也的内容ps aux,其旧的内容之后写入file


11

如果您在终端中写

ps aux > log

它将输出结果ps aux记录到命名文件中。

那如果你把

ps aux >> log

那么下一个输出将附加在第一个输出之后。如果只放置一个>,它将覆盖先前的文件。


4

是的,>>附加,>始终覆盖/销毁先前的内容。

ps -aux > log

是相同的

rm log 2>/dev/null
ps -aux >> log

在Wintel上.bat.cmd.ps1脚本也相同;共同的遗产,常识。


3

最重要的区别是,>使shell打开带有O_WRONLY|O_CREAT|O_TRUNC标志的文件或类似文件的对象-如果文件存在则将创建或截断该文件,而>>打开带有O_WRONLY|O_CREAT|O_APPEND标志的文件-如果存在则将创建或附加该文件。如果您跟踪系统调用,例如使用

$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1

$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1
+++ exited with 0 +++

请注意,在这两种情况下,打开文件的文件描述符都复制到命令的文件描述符1(stdout)上,并且将由Shell分叉的任何命令继承。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.