Добавление времени к файлу в Unix

У меня есть программа, которую я ввожу в финал:

time java SearchIt < input.txt

Затем я хочу добавить вывод time метод в новый файл SearchIt\ Results.csv

Я знаю, как сохранить его в новый файл:

(time java SearchIt < input.txt)&>SearchIt\ Result.txt

Тем не менее, это создает новый файл каждый раз, когда я выполняю код. Я старался

(time java SearchIt < input.txt)&>>SearchIt\ Result.txt

Но получил ошибку синтаксиса

-bash: синтаксическая ошибка рядом с неожиданным токеном `>'

Любая помощь будет отличной, спасибо!

2 ответа

Решение

Попробуй это:

(time java SearchIt < input.txt) >>SearchIt\ Result.txt 2>&1

Это устанавливает перенаправление, которое добавляет стандарт к файлу (>> часть), а затем перенаправляет стандартную ошибку в то же место (2>&1).

Обратите внимание, что заказ важен для перенаправлений, вы должны иметь 2>&1 после первого перенаправления.

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

{ time java SearchIt < input.txt ; } >>SearchIt\ Result.txt 2>&1

И действительно, в этом случае вам не нужен ни один подоболочек или блок кода, все перенаправления могут сосуществовать в одной команде (в этом простом случае).

time java SearchIt < input.txt >>SearchIt\ Result.txt 2>&1

Если вы хотите подавить вывод приложения, но сохранить вывод time команда, то вы можете сделать это:

{ time  { java SearchIt < input.txt >/dev/null ; } ; } >>SearchIt\ Result.txt 2>&1

Пожалуйста, обратите внимание, что это отбросит стандартный вывод java-приложения, но сохранит его вывод на стандартную ошибку (что обычно полезно). добавлять 2>&1 после >/dev/null если вы действительно хотите избавиться от всего выхода.

Влияние на производительность в вашем случае, вероятно, незначительно, но, как правило, вы должны избегать подоболочек, когда это возможно, в качестве хорошей практики кодирования. Помимо производительности, есть преимущества в переменной области (здесь это не актуально). Блоки кода - это всего лишь синтаксис, указывающий оболочке, как выполнять команды, они не создают дополнительных процессов сами по себе, а дополнительные блоки кода оказывают незначительное влияние на производительность.

Кстати, &>> должен работать на Bash 4 и новее, поэтому вы, вероятно, используете более старую версию или не используете Bash.

Чтобы добавить STDOUT вашего процесса в файл и вывод команд времени (который идет в STDERR) в другой файл, вы можете сделать

(time java SearchIt < input.txt) 1>> SearchItOutput.txt 2>> TimeOutput.txt

Если вы не хотите сохранять свой процесс STDOUT, но все же распечатываете его, тогда вы можете просто сделать

(time java SearchIt < input.txt) 2>> TimeOutput.txt

Если вы не хотите даже печатать свой процесс ' STDOUT (при условии, что вы работаете в Linux-подобной системе)

(time java SearchIt < input.txt) 1> /dev/null 2>> TimeOutput.txt
Другие вопросы по тегам