Как включать программу, которая только работает с в / файлах в конвейер?

В ударе просто используйте что-то как alertcommand | grep $(date +"%m/%d")

$() выполняет команду в подоболочке и возвращает вывод команды как строка. Кроме того, можно включить команду с обратными галочками к тому же эффекту.

3
07.06.2012, 13:27
3 ответа

если это удовлетворяет Вас, вот суждение, как сделать это использование каналы.

Предположение - то, что входные и выходные файлы "badtool" могут быть каналами.

mkfifo IF
mkfifo OF

# one therminal
tool | tool2 |... tooln > IF

# second terminal
bad_tool IF OF

#third terminal
tooln+1 < OF | tool n+2 | tool n+3 ...

Если требуется создать сценарий, можно перенести те части в функции:

function A(){ ... }
function B(){ ... }
function C(){ ... }
# and run in background in parallel
A&
B&
C&

Продолжите все свои изображения (каналы IF и OF являются "допускающими повторное использование"), и после того, как целое задание удалит их

rm IF OF
4
27.01.2020, 21:08
  • 1
    Я должен сделать что-то с этими каналами, ЕСЛИ и ТОГО, после того, как я закончил использовать их? –  bazzilic 07.06.2012, 13:47
  • 2
    Ответ, обновленный соответственно к Вашему вопросу. Да: необходимо удалить их после целого задания. Но они являются допускающими повторное использование, таким образом, можно использовать эту пару для всех файлов (предполагающий, что Вы не собираетесь использовать их параллельно-> в таком случае, одной паре для каждого потока) –  Grzegorz Wierzowiecki 07.06.2012, 14:00

Если конвейер обычно был бы:

tool1 | tool2 | tool3

но tool2 является “плохим”, который требует 2 параметров (1-й входной файл, 2-й выходной файл), можно переписать его как это:

tool2 <(tool1) >(tool3)

Конечно, если Ваша оболочка поддерживает замену процесса.

5
27.01.2020, 21:08
  • 1
    Они хорошая идея в целом. На практике это реализовано тем же способом, как предложено mkfifo "руководство pipeing". Таким образом в зависимости от длины сценария любой могло бы быть более удобно использовать сортировщика t <(X) >(Y) форма, любой для разделения его на разделы. Как я понял от проблемного оператора - существует инструмент MANY, так вот почему я предложил то же, но в форме, позволяющей разделять материал на разделы-> для улучшения удобочитаемости кода. –  Grzegorz Wierzowiecki 07.06.2012, 14:03

Если это - Linux, можно сделать

bad_tool /dev/stdin /dev/stdout

/dev/stdin и /dev/stdout просто символьные ссылки на /proc/self/fd/{0,1} (соответственно).

4
27.01.2020, 21:08

Теги

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