как подавить весь вывод команды используя bash?

<p>у меня есть скрипт bash, который запускает программу с параметрами. эта программа выводит некоторый статус (делает это, делает это ...). эта программа не может быть тихой. как я могу предотвратить отображение сценарием чего-либо?</p><p>я ищу что-то вроде окна "эхо выкл".</p>

<p>следующее посылает стандартный вывод на нулевое устройство (битовая корзина).</p><pre><code>scriptname >/dev/null </code></pre><p>и если вы также хотите, чтобы сообщения об ошибках отправлялись туда, используйте одно из (первое может работать не во всех оболочках):</p><pre><code>scriptname &>/dev/null scriptname >/dev/null 2>&1 scriptname >/dev/null 2>/dev/null </code></pre><p>и, если вы хотите записать сообщения, но не видите их, замените <code>/dev/null</code> реальным файлом, таким как:</p><pre><code>scriptname &>scriptname.out </code></pre><p>для полноты, в windows cmd.exe (где "nul" является эквивалентом "/ dev/null"), это:</p><pre><code>scriptname >nul 2>nul </code></pre>

<p>что-то вроде</p><pre><code>script > /dev/null 2>&1 </code></pre><p>это предотвратит стандартный вывод <em>и</em> вывод ошибок, перенаправив их оба на <code>/dev/null</code>.</p>

<p>пытаться</p><pre><code>: $(yourcommand) : - это сокращение от "ничего не делать".$()</code> это просто ваша команда.</p>

<p>альтернативой, которая может подходить в некоторых ситуациях, является присвоение результата команды переменной:</p><pre><code>$ dummy=$( grep root /etc/passwd 2>&1 ) $ echo $? 0 $ dummy=$( grep r00t /etc/passwd 2>&1 ) $ echo $? 1 </code></pre><p>поскольку bash и другие интерпретаторы командной строки posix не рассматривают присвоение переменных как команду, код возврата настоящей команды соблюдается.</p><p><strong>примечание:</strong> присвоение с ключевым словом <code>typeset</code> или <code>declare</code> рассматривается как команда, поэтому вычисляемый код возврата в этом случае - это само присвоение, а не команда, выполняемая в суб-оболочке:</p><pre><code>$ declare dummy=$( grep r00t /etc/passwd 2>&1 ) $ echo $? 0 </code></pre>

<p>как и в постах andynormancx, используйте это: (если вы работаете в среде unix)</p><pre><code>scriptname > /dev/null </code></pre><p>или вы можете использовать это: (если вы работаете в среде windows)</p><pre><code>scriptname > nul </code></pre>

<p>взгляните на этот пример из <strong> <a href="http://tldp.org/howto/bash-prog-intro-howto-3.html">проект документации linux</a> </strong>:</p><blockquote> <p><strong> 3.6 пример: файлы stderr и stdout 2 </strong></p> <p>это поместит каждый вывод программы в файл. иногда это подходит для записей cron, если вы хотите, чтобы команда передавалась в абсолютном молчании.</p> <pre><code> rm -f $(find / -name core) &> /dev/null </code></pre></blockquote><p>тем не менее, вы можете использовать это простое перенаправление:</p><pre><code>/path/to/command &>/dev/null </code></pre>

<p>в вашем скрипте вы можете добавить следующее к строкам, которые, как вы знаете, будут давать вывод:</p><pre><code>some\_code 2>>/dev/null </code></pre><p>или вы также можете попробовать</p><pre><code>some\_code >>/dev/null </code></pre>