Ответ
Оба оператора перенаправляют вывод команды (stdout) в файл.
>(перезапись) — создает новый файл или полностью перезаписывает содержимое существующего.>>(добавление) — создает новый файл или добавляет вывод в конец существующего файла.
Примеры:
# Создает или перезаписывает file.txt текстом "Hello"
echo "Hello" > file.txt
# Добавляет "World" на новой строке в конец file.txt
echo "World" >> file.txt
Результат в file.txt:
Hello
World
Важно: Если файла не существует, оба оператора создадут его. Оператор > — деструктивный, он удаляет предыдущее содержимое.
Ответ 18+ 🔞
Так, слушай, история про эти стрелочки в баше — это вообще отдельный вид искусства, блядь. Два значка, а пиздец сколько путаницы!
Вот смотри, оба этих уродца — > и >> — делают вроде одно и то же: берут всё, что команда наболтала в консоль (этот самый stdout), и пихают в файл. Но разница, сука, принципиальная, как между "выпить чаю" и "нажраться в хлам".
>(этот, однорогий) — он ПЕРЕЗАПИСЫВАЮЩИЙ, ёпта. Весь его девиз: "Было? Похуй. Сейчас будет по-моему". Он либо создаёт файл с нуля, либо находит старый, вытряхивает из него всё до последней буквы и пишет своё. Полный пиздец для предыдущего содержимого.>>(этот, двугорбый верблюд) — он ДОБАВЛЯЮЩИЙ. Он вежливый, блядь. Его философия: "О, файлик уже есть? Отлично, я аккуратненько припишу своё в самый конец, ничему не помешаю". Если файла нет — создаст, конечно.
Пример, чтобы совсем охуеть:
# Этой командой мы говорим: "Создай file.txt и впиши туда 'Hello'. Если там что было — в пизду, всё равно."
echo "Hello" > file.txt
# А этой командой: "Найди file.txt и допиши 'World' в конец, на новой строчке. Предыдущее не трогай, оно хорошо лежит."
echo "World" >> file.txt
И что в итоге в file.txt?
Hello
World
Главное, что надо вынести, чтобы не обосраться: Если файла нет — оба оператора его создадут, молодцы. Но этот ёбаный > — он деструктивный мудак, он старые данные просто стирает в ноль. Так что думай головой, прежде чем тыкать эту стрелку, а то потом будешь искать, куда делся твой лог за прошлый месяц, блядь.