перенаправить весь вывод в файл

<p>я знаю, что в linux, чтобы перенаправить вывод с экрана в файл, я могу использовать <code>></code> или <code>tee</code>. тем не менее, я не уверен, почему часть вывода все еще выводится на экран и не записывается в файл.</p><p>есть ли способ перенаправить весь вывод в файл?</p>

<p>эта часть записывается в stderr, используйте <code>2></code> для ее перенаправления. например:</p><pre><code>foo > stdout.txt 2> stderr.txt </code></pre><p>или если вы хотите в том же файле:</p><pre><code>foo > allout.txt 2>&1 </code></pre><p>примечание: это работает в (ba) sh, проверьте ваш shell на предмет правильного синтаксиса</p>

<p>все операционные системы posix <a href="http://en.wikipedia.org/wiki/standard\_streams">имеют 3 потока</a> : stdin, stdout и stderr. stdin - это вход, который может принимать stdout или stderr. stdout является основным выходом, который перенаправляется с помощью <code>></code>, <code>>></code> или <code>|</code>. stderr - это вывод ошибок, который обрабатывается отдельно, так что любые исключения не передаются команде или записываются в файл, который может быть поврежден; обычно это отправляется в какой-либо журнал или сбрасывается напрямую, даже когда stdout перенаправлен. чтобы перенаправить оба в одно и то же место, используйте:</p><p><strike><code><em>command</em> &> /some/file</code></strike></p><p><strong>edit</strong>: спасибо заку за то, что он указал, что вышеупомянутое решение не является переносимым - используйте вместо этого:</p><pre><code>*command* > file 2>&1 </code></pre><p>если вы хотите заставить замолчать ошибку, сделайте:</p><pre><code>*command* 2> /dev/null </code></pre>

<p>чтобы получить вывод на консоль и в файл <code>file.txt</code> например.</p><pre><code>make 2>&1 | tee file.txt </code></pre><p>примечание. <code>&</code> (в <code>2>&1</code>) указывает, что <code>1</code> - это не имя файла, а дескриптор файла.</p>

<p>используйте это - <code>"require command here" > log\_file\_name 2>&1</code></p><p><strong>подробное описание оператора перенаправления в unix/linux.</strong></p><p>оператор> обычно перенаправляет вывод в файл, но может быть на устройство. вы также можете использовать >> для добавления.</p><p>если вы не укажете число, тогда предполагается стандартный поток вывода, но вы также можете перенаправлять ошибки</p><pre><code>> file redirects stdout to file 1> file redirects stdout to file 2> file redirects stderr to file &> file redirects stdout and stderr to file </code></pre><p>/ dev/null - это нулевое устройство, оно берет любой ввод и выбрасывает его. может использоваться для подавления любого выхода.</p>

<p>кредиты на osexp2003 и j.a. ...</p><hr><p>вместо того, чтобы положить</p><pre><code>&>> your\_file.log </code></pre><p>за чертой в</p><pre><code>crontab -e </code></pre><p>я использую</p><pre><code>#!/bin/bash exec &>> your\_file.log … </code></pre><p>в начале сценария bash.</p><p>преимущество: у вас есть определения журнала в вашем скрипте. хорошо для git и т.д.</p>

<p>это может быть стандартная ошибка. вы можете перенаправить его:</p><pre><code>... > out.txt 2>&1 </code></pre>

<p>команда:</p><pre><code>foo >> output.txt 2>&1 </code></pre><p><strong>добавляет</strong> в файл <em> output.txt </em> без замены содержимого.</p>

<p>вы можете использовать команду <code>exec</code> для перенаправления всех выводов stdout/stderr любых команд позже.</p><p>пример сценария:</p><pre><code>exec 2> your\_file2 > your\_file1 your other commands..... </code></pre>

<p>используйте <code>>></code> для добавления:</p><p><code>command >> file</code></p>