Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
 Аватар для Alexey104
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105

Передача вывода команды через конвейер

28.11.2016, 21:01. Показов 5027. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Помогите, пожалуйста, понять принцип передачи вывода\результата выполнения команды по конвейеру в bash. Вот, например:
Bash
1
2
3
[alexey@Satellite ~]$ echo '123' | tee new_file | > /dev/null
[alexey@Satellite ~]$ cat new_file 
[alexey@Satellite ~]$
Ход выполнения строки 1 я себе представляю так:
Вывод команды 'echo'(символы '123') поступает на вход команды 'tee', которая сначала направляет этот вывод в файл 'new_file', а затем передаёт его дальше по конвейеру(в /dev/null). Но почему же в 'new_file' ничего не записалось? Ведь, по-идее, вывод команды 'echo' должен быть направлен в битоприёмник только после записи в 'new_file'.

Добавлено через 31 минуту

До меня тут вдруг дошло, что написать надо было так:
Bash
1
echo '123' | tee new_file > /dev/null
Но я всё равно не понял, почему в первом случае в 'new_file' ничего не записалось.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2016, 21:01
Ответы с готовыми решениями:

Программа, реализующая действия команды ls и организующая конвейер
Написать программу, выполняющую действия, аналогичные команде ls -l | grep Аргумент | sort (то есть, программа должна организовать...

Передача данных через порты ввода вывода
Возникла такая задача, передать информацию от одного МК к другому, причем для передачи информации доступны только порты вода вывода....

Как передать переменную через конвейер
Я понимаю, что данную задачу можно сделать через написание файла ps1. Но мне нужно сделать это в одну строку. Нужно найти список групп в...

4
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
30.11.2016, 04:52
Лучший ответ Сообщение было отмечено Alexey104 как решение

Решение

Не дальше по конвееру, а связывает выходной поток стандартного вывода на дисплей с дискриптором входного потока черной дыры.
Здесь нет ковеера, а есть перенапрваление вывода с stdout в файл.

Добавлено через 8 минут
Цитата Сообщение от Alexey104 Посмотреть сообщение
Но я всё равно не понял, почему в первом случае в 'new_file' ничего не записалось.
Потому что синтаксис записи не верный. Не на каждую нелепую команду баш ругается. Иногда он задумчиво молчит.
Если подставите вместо черной дыры обычный файл то все равно ни чего не получите, все уходит в конвеер, а от туда
нет комады что бы прочесть а перенаправление > просто перезаписывает файл с нуля и ни чего не забирает из пайпа.
Bash
1
echo '123' | tee new_file | cat > file
1
 Аватар для Alexey104
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
01.12.2016, 17:51  [ТС]
nezabudka, Ясно.
Благодарю за ответ!
0
 Аватар для volodin661
6677 / 2270 / 346
Регистрация: 10.12.2013
Сообщений: 7,838
01.12.2016, 18:14
если

1) 'синтаксис записи не верный'
2) 'ни чего не получите'
3) 'от туда'
4) 'ни чего не забирает'
5) 'нет комады что бы прочесть',

тогда Незабудка следует писать так: Не за будка - для сохранения стиля.
1
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
01.12.2016, 21:37
Alexey104, Небольшая поправка, я перечитала ваше сообщение с первой строчкой
кода и есть что добавить.
Команда tee читает поток из пайпа и синхронно раздваивает его в файл и на стандартный вывод.
Когда вы ставите дальше конвеер то перенаправляете один вывод команды tee со стандартного
выходного потока а конвеер, а второй поток остается направленным в файл, но так как после очередного
конвеера нет команды способной принять информацию то tee работая синхронно с двумя потоками
не передает информацию и в файл тоже.
Вот, думаю понятно и правильно обрисовала работу вашей первой строчки кода. В этом смысл
работы пайпа.

Добавлено через 3 часа 14 минут
volodin661, Создала в заметках памятку, буду исправляться. Спасибо
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2016, 21:37
Помогаю со студенческими работами здесь

Обработка вывода команды NETSH
Здравствуйте. Поскольку ноут постоянно подключается к 2м wi-fi точкам с разными подсетями, надоело менять в настройках адаптера ip-адрес....

Парсинг вывода команды на bash
Здравствуйте, есть результат выполнения утилиты: sh-4.1# failover info Running failover info Versions: ViPNet 3.3.0 (921), daemon 1.5...

Присвоение переменной вывода команды
Не могу понять как на батче это работает. Нашел в сети пример для Identify от ImageMagick for /F "usebackq" %%I in (`identify ^...

Выполнение команды net use с перенаправлением вывода
Доброго времени суток, подскажите что не так в коде, суть такая - запуск программы net.exe с аргументом (вывод справки net use и сапись...

FreeBSD, перенаправление вывода команды в файл
Пробую вывести результат команды в файл,выводит вместо файла в консоль,в чем проблема? tunefs -p da1s1>>myFile


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru