Vaclav_ Ответов: 1

Переведи на человеческий язык...для целей обучения.


Прикрепленный фрагмент кода обрабатывает сканирование hcitool с опциями и перенаправляет стандартный вывод как на экран / консоль ( термин Eclipse IDE), так и на системный файл (temp_file.txt ).
1. Почему необходимо добавить 2 в перенаправление ?
Почему бы не ">@1" ?
2. без "трубы |" hcitool жалуется на "слишком много параметров".
Но хочет / предлагает "нулевые параметры "(?)
3. положение "тройника" также критично , после "|" и перед файлом.
4. Когда нет необходимости выводить данные на консоль , это работает просто отлично

система("hcitool scan --info --class > temp_file.txt ");


system("hcitool scan --info  --class 2>&1 | tee temp_file.txt ");


Что я уже пробовал:

Удаление "2"
Удаление "|"
Перемещение ти вокруг.
В принципе, мне нужно лучше / некоторые объяснения так слепы "хит и промах"
кодирование избегается.
Ценю любые комментарии на эту тему.

1 Ответов

Рейтинг:
1

Richard MacCutchan

Это не имеет ничего общего с HCI, это стандартный сценарий оболочки Linux. "2>&1" говорит оболочке отправить все выходные данные, которые обычно идут в stderr, в stdout. "|" (Символ канала) говорит о передаче всех выходных данных (то есть комбинированных stderr и stdout) команде tee, которая отправляет их на терминал, а также именованный файл. Эта и другие функции оболочки подробно описаны на странице man для bash.


Vaclav_

поток stderr в stdout. Символ "|" (символ трубы) говорит о передаче всех выходных данных (то есть комбинированных stderr и stdout
Но в этот момент stderr был перенаправлен на stdout, так что там нет stderr как "весь вывод", так что же происходит commbined / piped ?

Richard MacCutchan

Это просто означает, что два потока чередуются и проходят через трубу как один поток. Таким образом, вы увидите любые сообщения об ошибках, смешанные с обычным выводом. В качестве альтернативы вы можете перенаправить stderr (дескриптор 2) в текстовый файл с помощью такой команды, как:

hcitool scan --info  --class 2>errors.txt | tee temp_file.txt

Тогда вам нужно будет проверить errors.txt после завершения команды.

Vaclav_

Теперь оба этих примера выводятся на консоль.
Кстати, я использовал HCI в качестве примера, думаю, мне нужно будет объяснить это в следующий раз, когда Gees.

cout <<"\t\t \ t hciconfig -a 2>&1"<< endl;
система("hciconfig -a 2>&1");
соиь <&ЛТ;"\т\т\т\hciconfig -а "на<< епси;
система("hciconfig -a ");

Richard MacCutchan

Именно так. Разве это проблема?

Vaclav_

Да это проблема
показывает, что использование "2>&1" в этом случае является фиктивным.
Следовательно, первоначальный ответ на вопрос № 1 является неполным - для (моей) учебной цели.

Richard MacCutchan

Что значит "фальшивка"? Может быть, вы могли бы уточнить, чего именно вы пытаетесь достичь здесь.

phil.o

Вы можете сказать, что это подделка, только если есть ошибка, которая не перенаправляется на консоль. Если ошибки нет, то невозможно сказать, есть ли ошибка или нет. Есть ли какая-то ошибка?

Patrice T

+5