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

21

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

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

Как о программировании оболочки?

    
задан Computernerd 08.01.2014 в 02:52
источник

5 ответов

44

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

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

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

, используя > , будет перезаписано.     

ответ дан Antonios Hadjigeorgalis 08.01.2014 в 03:05
11

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

    
ответ дан Brask 08.01.2014 в 03:05
7

> и >> являются операторами перенаправления для FD (файловые дескрипторы)

В bash у вас есть стандартные стандартные FD, которые являются стандартным вводом (strin), стандартным выходом (строкой) и стандартной ошибкой (strerr). Они также могут быть вызваны FD 0, FD 1 и FD 2 соответственно.

Обычно вы бы хотели, чтобы все FD указывали на терминал, но это можно изменить, используя перенаправление.

Например, если вы вызываете:

command > log.txt

Вы перенаправите вывод в файл log.txt Это похоже на вызов:

command 1> log.txt

Поскольку это только перенаправление строит, вы все равно сможете увидеть ошибку в терминале. Чтобы перенаправить strerr на ваш файл log.txt, вам нужно будет запустить:

command 2> log.txt

Опять же, это только перенаправление strerr. Если вы хотите перенаправить оба stdout и stderr, вам нужно дублировать вывод stderr на stdout с помощью команды >& .

command 1> log.txt 2>&1

Чтобы понять эту команду, вам нужно прочитать ее форму справа налево, сначала будет сделана копия stderr для stdout, затем строчка перенаправляется в файл log.txt.

Когда вы используете перенаправление таким образом, bash не будет смотреть, существует ли файл или нет, и просто создать его независимо от того, подразумевает ли это удаление существующего. Если вы хотите избежать потери того, что уже записано в вашем файле журнала, вы можете использовать команду >> тем же образом, как описано выше, но в этом случае все выходы будут добавлены к существующим файлам.

Для их использования в C ++ с cin, cout и cerr я думаю, что хэш дал лучший ответ, чем я мог.

Я не эксперт в этом, поэтому я, возможно, неправильно понял. Для получения более полной информации я советую читать руководство Bash по вики Greg

    
ответ дан Presbitero 09.01.2014 в 02:27
6

В C / C ++:

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

В оболочке Scripting / Programming:

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

Ссылки:

Вам может быть интересно прочитать:

ответ дан precise 08.01.2014 в 09:36
0

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

  #!/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  
    
ответ дан smn_onrocks 16.01.2014 в 12:48