bash скрипт записи времени выполнения в файл

мне нужно записать время, необходимое для выполнения этой команды в txt-файле:

time ./program.exe

Как я могу сделать в bash-скрипт?

Я пытаюсь с >> time.txt но это не работает (вывод не переходит в файл и переходит на экран).

4 ответов


начало time на bash записать в файл-это тяжелая работа. Это bash встроенная команда. (В Mac OS X есть внешняя команда /usr/bin/time, который выполняет аналогичную работу, но с другим форматом вывода и меньшим сопротивлением.)

вам нужно использовать:

(time ./program.exe) 2> time.txt

он записывает в стандартную ошибку (следовательно,2> нотации). Однако, если вы не используете под-оболочку (круглые скобки), она не работает; выходные данные по-прежнему поступают в экран.


альтернативно, и без под-оболочки, вы можете использовать:

{ time ./program.exe; } 2> time.txt

обратите внимание на пробел после открытой скобки и двоеточия; оба необходимы на одной строке. Фигурные скобки должны отображаться там, где может появиться команда, и должны быть автономными символами. (Если вы будете бороться достаточно сильно, вы придумаете ...;}|something или ...;}2>&1. Однако оба они идентифицируют скобку как отдельный символ. Если вы попробуете ...;}xyz оболочка (наверное) не найдите команду }xyz, хотя.)


мне нужно запустить команду в терминале. Если я это сделаю:

 xterm -xrm '*hold: true' -e (time ./Program.exe) >> time.exe & sleep 2

он не работает и говорит мне Syntax error: "(" unexpected. Как это исправить?

вам нужно будет сделать что-то вроде:

xterm -xrm '*hold: true' -e sh -c "(time ./Program.exe) 2> time.txt & sleep 2"

изменение ключа заключается в запуске оболочки со скриптом, исходящим из аргумента в ; вы можете заменить sh С /bin/bash или эквивалент имени. Это должно обойти любые проблемы "синтаксической ошибки". Я не совсем уверен, что вызывает эту ошибку, поэтому может быть более простой и лучший способ справиться с ней. Также возможно, что xterm ' s -e опция принимает только один строковый аргумент, и в этом случае, я полагаю, вы бы использовали:

xterm -xrm '*hold: true' -e 'sh -c "(time ./Program.exe) 2> time.txt & sleep 2"'

вы можете руководство bash xterm насколько я могу.

я не уверен, почему вы запустите приурочен программы в фоновом режиме, но это ваша проблема, а не моя. Аналогично, the sleep 2 не очевидно необходимо, если hold: true держит открытым контактом.


это не легко перенаправить выход bash builtin time.

одним из решений является использование внешнего time программа:

/bin/time --append -o time.txt ./program.exe

(в большинстве систем это программа GNU, поэтому используйте info time, а не man получить документацию).


time_elapsed=(time sh -c "./program.exe") 2>&1 | grep "real" | awk '{print $(NF)}' echo time_elapsed > файл.формат txt Эта команда должна дать вам точное время, затраченное в bash в нужном файле..

вы также можете перенаправить это в файл usng 2 > file.txt, как описано в другом ответе.


просто заключите команду на время в { .. }:

{ time ./program.exe; } 2>&1

конечно, выход встроенного времени идет на stderr, таким образом, необходимое перенаправление 2>&1.

тогда может показаться сложным захватить вывод, давайте использовать второй { .. } чтобы легче прочитать команду, это работает:

{ { time ./program.exe; } 2>&1; } >> time.txt              # This works.

однако правильная конструкция должна просто иметь обратный захват, как это:

{ time ./program.exe; } >> time.txt  2>&1;                 # Correct.

закрыть любой возможный выход из команда, перенаправить ее вывод в /dev/null, как это:

{ time ./program.exe >/dev/null 2>&1; } >> time.txt 2>&1   # Better.

и, поскольку теперь есть только выход на stderr, мы могли бы просто захватить его:

{ time ./program.exe >/dev/null 2>&1; } 2>> time.txt       # Best.

выход из ./ программа должна быть перенаправлена, или она может закончиться внутри времени.формат txt.