LINUX.ORG.RU

В rc shell можно сделать, например, так:
{var=`{read | tee /dev/stderr}} >[2=1]
Но это костыль-решение.

quantum-troll ★★★★★
()
Ответ на: комментарий от val-amart

на экране, в переменной пофиг на форматирование

fragment
() автор топика
Ответ на: комментарий от val-amart

Это был намёк ТСу на решение типа:

mkfifo test.pipe;
cat test.pipe &
VAR=$(cat some_file | tee test.pipe);

schizoid ★★★
()

что-то я не понял, а одновременно направлять вывод на экран и в файл тоже, что ли, нельзя без разрушения форматирования?

fragment
() автор топика
Ответ на: комментарий от fragment

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

some_ref=$(some_operation)
(echo ${some_ref} > ${some_file} &); echo ${some_ref}

Вообще в баше «foo ; bar» - последовательное выполнение, а "(foo &) ; bar" - параллельное. Каких-то более кратких языковых конструкций позволяющих скрыть промежуточную some_ref не припомню (и это всё равно будет сахар).

quasimoto ★★★★
()
Ответ на: комментарий от fragment

Каким образом разрушается форматирование? Ты цвета имеешь в виду?

provaton ★★★★★
()
Ответ на: комментарий от fragment

Не разрушается. Это видно если не забывать кавычки при вызове echo.

legolegs ★★★★★
()

может немного не то что нужно, но я, для затратных по времени, команд делал так

$ ./run_cmd.sh > file.log &
$ tail -f file.log
mono ★★★★★
()
Ответ на: комментарий от fragment

без разрушения форматирования?

Телепаты в отпуске. Пример в студию.

geekless ★★
()
Ответ на: комментарий от alex_custov

ага, форматирование сохраняет

но всё же это не то, но тут моя вина - я не совсем правильно сформулировал задачу

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

я читал ман по башу и пытался сделать через exec, да то ли я тормоз, то ли вообще нельзя, но не получилось

fragment
() автор топика

Если без script. tmux, etc то я бы поигрался с дублицированием дескрипторов и какой-нить cat <$STDOUT_CLONE >log. Так же с stderr.

true_admin ★★★★★
()
#1. одним куском
REPLY="$(источник | tee $экран )"
#2. по частям
источник | while read
do 
  echo $REPLY && обрабатывай себе
done >$экран

Твоя задаче - обеспечить, чтобы $экран указывал на экран, и в первом случае не совпадал с stdout. Для чего есть /dev/stderr, /dev/stdin (может не пустить), и /dev/fd/{0,2..много}

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.