В чем разница между ">" и ">>" в команде оболочки?
Может ли кто-нибудь объяснить мне разницу между > а также >> при использовании команд оболочки?
Пример:
ps -aux > log
ps -aux >> log
Кажется, результат одинаков в любом случае.
4 ответа
> используется для перезаписи (" клоббер") файла и >> используется для добавления в файл.
Таким образом, когда вы используете ps aux > file, выход ps aux будет написано file и если файл с именем file уже присутствовал, его содержимое будет перезаписано.
И если вы используете ps aux >> file, выход ps aux будет написано file и если файл с именем file файл уже будет содержать предыдущее содержимое, а также содержимое ps auxнаписано после его более старого содержания file,
Если ты пишешь в терминал
ps aux > log
Это положит вывод ps aux войти именованный файл.
тогда если вы положите
ps aux >> log
тогда следующий вывод будет добавлен ниже первого. если поставить только один > он перезапишет предыдущий файл.
Самое важное отличие состоит в том, что > заставляет оболочку открывать файл или подобный файлу объект с O_WRONLY|O_CREAT|O_TRUNC flags - файл будет создан или обрезан, если он существует, а >> открывает файл с O_WRONLY|O_CREAT|O_APPEND flags - файл будет создан или добавлен, если он существует. Это очевидно, если вы отслеживаете системные вызовы, например, с
$ 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) команды, и он будет наследоваться любой командой, которую разветвляет оболочка.
Да, >> присоединяет, > всегда перезаписывает / уничтожает предыдущий контент.
ps -aux > log
такой же как
rm log 2>/dev/null
ps -aux >> log
На Wintel это то же самое для .bat, .cmd а также .ps1 сценарии тоже; общее наследие, здравый смысл.