В чем разница между «>» и «>>»?

12

В чем разница между ls >и ls >>? Мне нужно понять это для моих вычислений GCSE, но не знаю, в чем разница.

Хелен Шофилд
источник
1
В дополнение к хорошему ответу, приведенному ниже, см. Второй (и наиболее одобренный) ответ на stackoverflow.com/a/984761/1841533: использование >> для записи в файл (например: журнал) также имеет приятный побочный эффект: не должно быть символов "Nul" в начале файла saif, если файл обрезан, пока процесс все еще записывает в него! (например: во время ротации файла журнала). Поскольку «foo> file» не ищет, он не замечает изменения размера и все еще указывает дальше, чем начало, и ОС заполняется Nul. foo >> file ищет и поэтому указывает на новую позицию (начало).
Оливье Дюлак
Поскольку это образовательный вопрос, я предлагаю вам научиться работать с соответствующей документацией: Справочное руководство Bash, раздел «Перенаправления» (также доступно через man bash).
Дэвид Фёрстер

Ответы:

28

>& >>являются операторами перенаправления; они передают вывод чего-либо, в этом случае ls, в другом месте. Если этот вывод идет в файл, >будет обрезать файл - т.е. удалить любой предыдущий контент, тогда как >>добавит новые данные в конец файла, сохраняя предыдущий контент. Это будет работать с любым вводом, поэтому echo& cat, например, также можно использовать таким образом.

Также интерес представляет |оператор, который передает данные в другое приложение - так ls | cat -nчто даст вам список с номером строки!

Трубы это соответствующий термин.

Марк Уильямс
источник
2
Обрезать или перезаписать?
ДК Бозе
2
@DKBose из straceoutput for bash -c 'echo a > blah':, open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666)так что truncate будет правильным термином.
Муру
«каналы», а также «перенаправление вывода», которые вы как бы использовали в своем ответе. Отлично сработано.
0xSheepdog
нашел то, что я имел в виду: в дополнение к этому хорошему ответу, пожалуйста, посмотрите 2-й (и наиболее одобренный) ответ на stackoverflow.com/a/984761/1841533 : использование >>для записи в файл (например: журнал) также имеет приятную сторону эффект отсутствия символов «Nul» появляется в начале файла saif, если файл обрезан, а процесс все еще записывает в него! (например: во время ротации файла журнала). Поскольку «foo> file» не ищет, он не замечает изменения размера и все еще указывает дальше, чем начало, и ОС заполняется Nul. foo >>fileищет и, следовательно, указывает на новую позицию (начало).
Оливье Дюлак
5

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

Оба создадут файл, если файл не существует. Если файл уже существует, то >файл будет перезаписан, где as >>добавит данные в файл.

Так ls > myfileсоздаст документ с именем, myfileесли он не существует. Если myfileон уже существует и содержит некоторые данные, он будет перезаписан новыми данными, которые вы передаете.

Принимая во внимание, ls >> myfileчто создаст файл, если его не существует, и запишет в него данные. Если файл существует с некоторыми данными, то новые данные добавляются в его конец.

Sudheer
источник
0

Если вы используете одиночный>, он перезапишет файл, если он уже существует. Будьте очень осторожны при использовании этого.

Если вы используете два >>, то он просто добавится (другими словами, начнет писать внизу файла), если он уже существует. В противном случае он создает новый файл, если он не существует.

Эрик Ларсон
источник
1
Зачем повторять ответ, который уже дан?
Реквист