У меня есть следующий код, который считывает несколько команд, печатает их и выводит их вывод.Команда prepend, stdout и stderr
while read line ; do
echo "C:$line"
echo "O:$(${line} 2>&1 | perl -pe 's,\n,\\n,'g)\n"
done << EOF
g++-4.8 -O2 -Wall -Wextra -pedantic -pthread main.cpp
./a.out
EOF
Выход:
C:g++-4.8 -O2 -Wall -Wextra -pedantic -pthread main.cpp
O:main.cpp: In function ‘int main(int, char**)’:\nmain.cpp:3:9: warning: unused variable ‘unused’ [-Wunused-variable]\n int unused;\n ^\n\n
C:./a.out
O:*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0x00007fff3bd01a5c ***\n======= Backtrace: =========\n/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7f6960e1ab96]\n./a.out[0x400502]\n/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f6960dbd76d]\n./a.out[0x400535]\n======= Memory map: ========\n\n
Я хотел бы различать стандартный вывод и стандартный поток ошибок и использовать 'E:' префикс для STDERR. Также я хотел бы напечатать код выхода каждой командной строки.
Как я могу это достичь?
Просто предупреждение: имейте в виду, что-то вроде 'a.out«строковым»' в документ-здесь может привести ваш код ломаться, если 'a.out' ожидает один аргумент. Здесь 'a.out' получит 2:' 'a' и' string ''. – chepner