Добавление времени к файлу в 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