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