Яка різниця між ">" та ">>"?


12

У чому різниця між ls >і ls >>? Мені потрібно зрозуміти це для моїх обчислень на GCSE, але не знаю, у чому різниця.


1
На додаток до приємної відповіді нижче, будь ласка, дивіться другу (і найбільш схвалену) відповідь на stackoverflow.com/a/984761/1841533: використання >> для запису у файл (наприклад: журнал) також має хороший побічний ефект для не мають символів "Nul" на початку файлу saif, якщо файл усічений, а процес все ще записується до нього! (наприклад: під час обертання файлу журналу). Оскільки "foo> file" не шукає, він не помічає зміни розміру і все ще вказує далі, ніж початок, реклама ОС заповнюється Nul. Файл foo >> шукає і тому вказує на нову позицію (початок).
Олів'є Дулак

Оскільки це питання освіти, я пропоную вам навчитися працювати з відповідною документацією: Довідковий посібник Баша, розділ «Перенаправлення» (також доступний через man bash).
Девід Фоерстер

Відповіді:


28

>& >>є операторами переадресації; вони переносять вихід чогось, в даному випадку ls, в інше місце. Якщо цей висновок перейде до файлу, >він уріже файл - тобто видалить будь-який попередній вміст, тоді як >>додасть нові дані в кінці файлу, зберігаючи попередній вміст. Це буде працювати з будь-яким входом, тому echo& cat, наприклад, також можна використовувати цей спосіб.

Цікавим є також |оператор, який передає дані в іншу програму - так ls | cat -nви отримаєте список номерів рядків!

Труби - відповідний термін.


2
Урізати чи перезаписати?
ДК Бозе

2
@DKBose from straceoutput for bash -c 'echo a > blah':, open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666)тому усічення було б правильним терміном.
муру

"труби", а також "перенаправлення виводу", яке ви на зразок використовуєте у своїй відповіді. Молодці.
0xШепдог

знайшов те , що я мав в виду: В доповненні до цього хорошого відповіді, будь ласка , см 2 - й (і самий upvoted) відповідь на stackoverflow.com/a/984761/1841533 : використовуючи >>для запису в файл (наприклад: колода) також має сторону хорошою ефект відсутності символів "Nul" з'являються на початку файлу saif, якщо файл усічений, а процес все ще записується до нього! (наприклад: під час обертання файлу журналу). Оскільки "foo> file" не шукає, він не помічає зміни розміру і все ще вказує далі, ніж початок, реклама ОС заповнюється Nul. foo >>fileпрагне і тому вказує на нову позицію (початок).
Олів'є Дулак

5

Символи >і >>використовуються для перенаправлення виводу у файл.

Обидва створить файл, якщо файл не існує. Якщо файл вже існує, тоді >він замінить файл, куди як >>додадуть дані до файлу.

Так ls > myfileстворимо документ, названий, myfileякщо його не існує. Якщо myfileвін вже присутній і містить деякі дані, вони будуть перезаписані новими даними, які ви їх передасте.

Тоді як ls >> myfileбуде створено файл, якщо його немає, і записувати в нього дані. Якщо файл існує з деякими даними, то нові дані додаються до його кінця.


0

Якщо ви використовуєте одиночний>, він замінить файл, якщо він уже існує. Будьте дуже обережні, використовуючи цей.

Якщо ви використовуєте два >>, вони просто додадуть (іншими словами, почніть писати внизу файлу), якщо він вже є. В іншому випадку він створює новий файл, якщо його не існує.


1
Навіщо повторювати відповідь, яка вже дана?
Реквізити
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.