Результаты поиска
Bash Обработка Труб
Кто-нибудь знает, как bash обрабатывает отправку данных по каналам?
cat file.txt | tail -20
Выводит ли эта команда все содержимое file.txt в буфер, который затем считывается tail? Или эта команда, скажем, выводит содержимое file.txt строка за строкой, а затем делает паузу в каждой строке для обработки хвоста, а затем запрашивает дополнительные данные?
Причина, по которой я спрашиваю, заключается в том, что я пишу программу на встроенном устройстве, которое в основном выполняет последовательность операций с некоторым куском данных, где выход одной операции отсылается в качестве входа следующей операции. Я хотел бы знать, как linux (bash) справляется с этим, поэтому, пожалуйста, дайте мне общий ответ, а не конкретно, что происходит, когда я запускаю "cat file.txt | tail -20".
Заранее благодарим вас за ваши ответы!
EDIT: Shog9 указал на соответствующую статью Википедии, это не привело меня непосредственно к статье, но это помогло мне найти это: http://en.wikipedia.org/wiki/Pipeline_% 28Unix%29#реализация , которая действительно имела информацию, которую я искал.
Мне очень жаль, что я не совсем ясно выразился. Конечно, вы используете канал и, конечно же, используете stdin и stdout соответствующих частей команды. Я предполагал, что это было слишком очевидно, чтобы утверждать.
Я спрашиваю, как это handled/implemented., так как обе программы не могут работать одновременно, как данные передаются из stdin в stdout? Что произойдет, если первая программа генерирует данные значительно быстрее, чем вторая программа? Выполняет ли система просто первую команду до тех пор, пока она не завершится или не заполнится буфер stdout, а затем переходит к следующей программе и так далее в цикле, пока не останется больше данных для обработки, или есть более сложный механизм?
Лучшие практики для среды разработки и API dev?
Мой нынешний работодатель использует сторонний хостинг-провайдер CRM, и у нас есть довольно сложный уровень интеграции между двумя системами. Среди возможностей поставщика CRM для разработчиков является создание бизнес-логики на языке Java, как и на таких событиях, как пользователь, нажав на кнопку или отправив новую учетную запись в систему, есть проверка и / или бизнес-логика выстрелить.
Одна из возможностей, которую мы используем, заключается в том, что бизнес-код, запущенный на хост-провайдере, вызывает веб-службы, которые мы размещаем. Канонический пример - это торговый представитель, который вводит новый интерес к продажам и нажимает кнопку, чтобы проверить наши системы, чтобы узнать, можем ли мы идентифицировать этот новый интерес на основе адреса email, имени company/first/last и т. д., И если да, верните внутренний GUID, который представляет этого человека. Все это прекрасно работает для нас, но мы снова и снова натыкаемся на стену, пытаясь настроить разумную среду разработки для работы.
Таким образом, хотя наш вариант использования немного нюансирован, это обычно может применяться к любому дому разработки, который строит APIs для потребления третьей стороной: каковы некоторые рекомендации при проектировании конвейера разработки и среды, когда вы строите APIs для потребления внешним миром?
В нашем офисе все наши разработчики находятся за брандмауэром, поэтому текущий код не может быть поражен внешним миром, в нашем случае провайдером CRM. Мы могли бы проделать дыры в брандмауэре, но это не идеально с точки зрения безопасности поверхности. Особенно, если # разработчиков, которые должны быть в DMZ, как область высока. В настоящее время мы пробуем одну машину dev в DMZ, а затем удаляемся в нее по мере необходимости для выполнения работы dev, но это создает проблему нехватки ресурсов, если несколько разработчиков нуждаются в коробке, не говоря уже о том, что они делают потенциально конфликтующие изменения (например, разные ветви).
Мы рассмотрели только издевательство / подделку входящих запросов путем создания поддельных клиентов для этих служб, но это довольно большие накладные расходы при создании наборов функций (хотя это по своей природе усиливает тестируемость нашего APIs). Это также не устраняет тот факт, что иногда нам действительно нужно диагностировать/отлаживать проблемы, исходящие от самого реального клиента, а не от какой-то поддельной полезной нагрузки запроса.
Что сделали другие в таких сценариях? В этот день и век мэшапов, должно быть много людей там w/ опыт разработки APIs-что работает (и не работает так) хорошо для людей там?