LINUX.ORG.RU

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

quantum-troll ★★★★★ ()
Ответ на: комментарий от 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 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.