LINUX.ORG.RU

Как засунуть stderr в sh переменную ?


0

0

Есть программа, нужно запустить ее и stdout засунуть в одну переменную, а stderr в другую, как проще это сделать ?

stdout можно так:
MYSTDOUT=$(./prog)

Как то-же сделать с stderr ? Запускать программу можно только один раз.
Смешивать stderr и stdout нельзя. Не хочется с файлами извращатся, чуствую что можно и без файлов, подскажите плиз !

anonymous

Ответ на: комментарий от Chumka

Нет надо одновременно получить в разных переменных stdout и stderr при одном запуске программы.

anonymous
()

Есть программа (сырцов от нее нет), типа:

cat prog.cpp:
#include <stdio.h>

int main()
{
fprintf (stdout, "stdout\n");
fprintf (stderr, "stderr\n");

return 0;
}

g++ prog.cpp -o prog

Нужно ее вызвать один раз и получить чтобы например в переменной MYSTDOUT лежало "stdout\n", а в MYSTDERR лежало "stderr\n".

Понятно что можно сделать:
./prog > /tmp/stdout 2> /tmp/stderr
MYSTDOUT=$(cat /tmp/stdout)
MYSTDERR=$(cat /tmp/stderr)

Но через файлы не красиво... Как сделать не через файлы ???

anonymous
()
Ответ на: комментарий от thand

Это неинтересно. Я mktemp и так прикрутил.

anonymous
()
Ответ на: комментарий от corpus

Ничего не мешает, более того сейчас я так и сделал (и показал это выше). Уродливо это как-то.

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

>./prog > /tmp/stdout 2> /tmp/stderr >MYSTDOUT=$(cat /tmp/stdout) >MYSTDERR=$(cat /tmp/stderr)

можно выводить в файл только stderr или stdin (чей обьём поменьше):

MYSTDOUT=$(./prog 2> /tmp/stderr)

MYSTDERR=$(cat /tmp/stderr)

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