В сценарии оболочки оператор >
создаст файл, который вы поместите прямо в него, и сотрет все содержимое файла, если оно существует, но >>
добавит текст в файл, который будет предпочтительнее >>
будет использовать при записи файла журнала. например, Вы хотите добавить время, счет или некоторые журналы процесса и >
, чтобы создать новый файл, попробуйте это:
#!/bin/bash
nowt=$(date +"%T")
date1=$(date +"%s")
NOW=$(date +"%d-%m-%Y")
now=$NOW" "$nowt
file_name=$NOW"_"$nowt".log"
echo "START TIME WAS :$now " | cat > /home/user/Desktop/$file_name
sh some_sh_file you want to run 2>&1 | tee >> /home/user/Desktop/$file_name #want to log the out put
nowt=$(date +"%T")
date2=$(date +"%s")
NOW=$(date +"%d-%m-%Y")
now=$NOW" "$NOW
diff=$(($date2-$date1))
echo "$(($diff / 60)) minutes and $(($diff % 60)) seconds elapsed."
echo "END TIME WAS :$now" | cat >> /home/user/Desktop/$file_name
echo "$(($diff / 60)) minutes and $(($diff % 60)) seconds elapsed." | cat >> /home/user/Desktop/$file_name
Символ правой угловой скобки (>) используется для перенаправления вывода в файл на диске. Если указанный файл еще не существует, он создается; если он существует, он перезаписывается. Символ левой угловой скобки (<) используется для перенаправления ввода из файла на диске. Чтобы добавить вывод в существующий файл, используйте двойные правые угловые скобки (>>)
В C / C ++ операторы сдвига влево и вправо используют символы <<
и >>
в качестве побитового оператора; которые выполняют операции сдвига над битами. C ++ также использует перегруженные операторы побитового сдвига в основных операциях ввода / вывода; >>
и <<
скобки в C ++ используются для извлечения и вставки данных / информации в потоки , которые могут быть стандартными файлами ввода / вывода.
В сценариях / программировании оболочки мало чем отличается от операций извлечения / вставки , как упомянуто выше, >>
/ <<
. ] (варианты операторов >
/ <
) используются для перенаправления стандартных потоков из / в потоки, определенные пользователями и выполнения добавления (в отличие от >
/ <
] который перезаписывает) операций.
#include
с?
– Dave
04.05.2020, 20:19
>
и >>
являются операторами перенаправления для FD (дескрипторы файлов)
В bash у вас есть стандартные FD дерева, которые представляют собой стандартный ввод (strin), стандартный вывод (strout) и стандартная ошибка (strerr). Они также могут быть вызваны как FD 0, FD 1 и FD 2 соответственно.
Обычно у вас есть все FD, указывающие на терминал, но это можно изменить с помощью перенаправления.
Например, если вы позвоните:
command > log.txt
Вы перенаправите вывод в файл log.txt. Это похоже на вызов:
command 1> log.txt
Так как это перенаправляет только strout вы все равно сможете увидеть ошибку в терминале. Чтобы перенаправить strerr в ваш файл log.txt, вам нужно выполнить:
command 2> log.txt
Опять же, это только перенаправляет strerr. Если вы хотите перенаправить как stdout, так и stderr, вам необходимо продублировать вывод stderr на stdout с помощью команды >&
.
command 1> log.txt 2>&1
Чтобы понять эту команду, вам нужно прочитать ее справа налево, сначала сделайте копию stderr в stdout, затем strout перенаправится в файл log.txt.
Когда вы используете перенаправление таким образом, bash не будет смотреть, существует файл или нет, и просто создаст его, независимо от того, подразумевает ли это удаление существующего. Если вы хотите избежать потери того, что уже было записано в вашем файле журнала, вы можете использовать команду >>
так же, как описано выше, но в этом случае все выходные данные будут добавлены к существующим файлам.
Для их использования в C ++ с cin, cout и cerr, я думаю, хеш дал лучший ответ, чем я мог.
1119 Я не эксперт в этом, поэтому я мог ошибиться. Для более полной информации я советую прочитать руководство Bash на Wiki Грега
>>
может использоваться для передачи вывода в текстовый файл и будет добавлять к любому существующему тексту в этом файле.
«любая команда» >>
textfile.txt
добавляет вывод «любой команды» в текстовый файл.
с помощью >
перезапишет.