Перенаправить команду времени и вывод stdout в один файл через скрипт оболочки - PullRequest
0 голосов
/ 15 марта 2020

Итак, начните изучать скрипты, у меня есть следующий main.cppp

#include <iostream>
int main()
{
    std::cout << "Hello Geek\n";
    return 0;
}

Я написал несколько скриптов для компиляции и запуска

g++ -o test -g main.cpp
{ time ./test ; } 2>&1> /home/kj/bashTest/log

в журнале, который я вижу "Hello Компьютерщик ", но вывод времени отображается на консоли вместо файла журнала. Я не уверен, как это исправить, хотя есть некоторые подобные сообщения по этому поводу. Может ли кто-нибудь дать мне совет?

Ответы [ 3 ]

2 голосов
/ 15 марта 2020

Вам просто нужно инвертировать два перенаправления:

{ time ./test ; } > /home/kj/bashTest/log 2>&1

Если вы сначала перенаправите стандартную ошибку, она останется на консоли, что эквивалентно отсутствию эффекта.

1 голос
/ 15 марта 2020

Простое решение состоит в том, чтобы перенаправить все потоки в журнал:

{ time ./test ; } &> /home/kj/bashTest/log

Как правило, это go, если разделение потоков не требуется.

0 голосов
/ 15 марта 2020

Это решает и мой вопрос:

g++ -o test -g main.cpp
{ time ./test ; } 2>&1 | cat > /home/kj/bashTest/log
...