2

Как можно проанализировать вывод одной команды по нескольким командам без усечения на каждом шаге?

Например, ls -al|grep -i something то пропустит каждую строку, в которой есть «что-то», в следующую трубу, что нормально, но это также означает, что любая другая строка в трубе отбрасывается, так как не будет соответствовать условию. Я хочу, чтобы у меня была возможность работать с одним каналом многими командами независимо.

В данном случае это канал от Mutt, который пропускает все тело сообщения. Я хочу получить grep, sed, delete и назначить каждый из них переменным bash.

Сначала я хочу назначить переменную "идентификатор сообщения", "другую тему" и т.д. Затем передать их в соответствующие аргументы команд.

Вот как это будет

MessageBodyFromMutt|grep something -Ax -Bx |grep another thing from the original message| sed some stuff from the original message| cut from here to there

Очевидно, что приведенная выше строка не делает то, что я хочу.

Я хочу, чтобы все эти команды работали с исходным телом сообщения. Надеюсь это имеет смысл

1 ответ1

2

Вы можете сохранить выходные данные во временный файл и использовать этот файл в качестве входных данных для отдельных команд.
Если команды не имеют вывода, вы можете использовать tee с заменой процесса bash ; это будет выглядеть

MessageBodyFromMutt | tee >( command1 ) >( command2 ) >( command3 )

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

Если вы не можете создать временный файл, вы можете сохранить вывод, который вы хотите обработать несколько раз, в переменной, а затем echo его несколько раз:

messageBody="$( MessageBodyFromMutt )"
echo "$messageBody" | command1
echo "$messageBody" | command2
echo "$messageBody" | command3

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .