Что означает >> или двойные угловые скобки? [дубликат]

На этот вопрос уже есть ответ здесь:

Кажется, такие простые вопросы, но я не могу найти какой-либо ресурс, относящийся к нему

В C / C ++ это означает сохранить прочитанное в значении из командной строки и сохранить его внутри переменной,

Как насчет программирования оболочки?

26
задан 14 January 2014 в 22:36

5 ответов

>> может использоваться для передачи вывода в текстовый файл и будет добавлять к любому существующему тексту в этом файле.

«любая команда» >> textfile.txt

добавляет вывод «любой команды» в текстовый файл.

с помощью > перезапишет.

0
ответ дан 14 January 2014 в 22:36

Символ правой угловой скобки (>) используется для перенаправления вывода в файл на диске. Если указанный файл еще не существует, он создается; если он существует, он перезаписывается. Символ левой угловой скобки (<) используется для перенаправления ввода из файла на диске. Чтобы добавить вывод в существующий файл, используйте двойные правые угловые скобки (>>)

0
ответ дан 14 January 2014 в 22:36

> и >> являются операторами перенаправления для 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 Грега

0
ответ дан 14 January 2014 в 22:36

В C / C ++:

В C / C ++ операторы сдвига влево и вправо используют символы << и >> в качестве побитового оператора; которые выполняют операции сдвига над битами. C ++ также использует перегруженные операторы побитового сдвига в основных операциях ввода / вывода; >> и << скобки в C ++ используются для извлечения и вставки данных / информации в потоки , которые могут быть стандартными файлами ввода / вывода.

В сценариях / программировании оболочки:

В сценариях / программировании оболочки мало чем отличается от операций извлечения / вставки , как упомянуто выше, >> / << . ] (варианты операторов > / <) используются для перенаправления стандартных потоков из / в потоки, определенные пользователями и выполнения добавления (в отличие от > / < ] который перезаписывает) операций.

Ссылки:

Вас может заинтересовать чтение:

0
ответ дан 14 January 2014 в 22:36

В сценарии оболочки оператор > создаст файл, который вы поместите прямо в него, и сотрет все содержимое файла, если оно существует, но >> добавит текст в файл, который будет предпочтительнее >> будет использовать при записи файла журнала. например, Вы хотите добавить время, счет или некоторые журналы процесса и >, чтобы создать новый файл, попробуйте это:

  #!/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  
0
ответ дан 14 January 2014 в 22:36

Другие вопросы по тегам:

Похожие вопросы: