Как заставить замолчать вывод в скрипте Bash? - PullRequest
122 голосов
/ 19 февраля 2010

У меня есть программа, которая выводит на стандартный вывод и хотела бы отключить этот вывод в скрипте Bash при конвейерной передаче в файл.

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

% myprogram
% WELCOME TO MY PROGRAM
% Done.

Я хочу, чтобы следующий скрипт ничего не выводил на терминал:

#!/bin/bash
myprogram > sample.s

Ответы [ 7 ]

166 голосов
/ 19 февраля 2010

Если он также выводит на stderr, вы захотите замолчать. Вы можете сделать это, перенаправив дескриптор файла 2:

# Send stdout to out.log, stderr to err.log
myprogram > out.log 2> err.log

# Send both stdout and stderr to out.log
myprogram &> out.log      # New bash syntax
myprogram > out.log 2>&1  # Older sh syntax

# Log output, hide errors.
myprogram > out.log 2> /dev/null
49 голосов
/ 19 февраля 2010

2>&1

с этим вы будете перенаправлять stderr (который является дескриптором 2) в файловый дескриптор 1, который является stdout

myprogram > sample.s

Теперь при выполнении этого вы перенаправляете стандартный вывод в файл sample.s

myprogram > sample.s 2>&1

Объединение двух команд приведет к перенаправлению как stderr, так и stdout в sample.s

myprogram 2>&1 >/dev/null

Если вы хотите полностью замолчать ваше приложение

32 голосов
/ 03 августа 2013

Вся продукция:

scriptname &>/dev/null

Портативный:

scriptname >/dev/null 2>&1

Портативный:

scriptname >/dev/null 2>/dev/null

Для новой версии bash (без переноса):

scriptname &>-
10 голосов
/ 04 мая 2011

Если вы хотите, чтобы STDOUT и STDERR [все], то самый простой способ:

#!/bin/bash
myprogram >& sample.s

затем запустите его как ./script, и вы не получите вывод на свой терминал. :)

"> &" означает STDERR и STDOUT. & также работает с трубой так же: ./script |& sed который отправит все в sed

9 голосов
/ 14 июля 2016

Если вы все еще не можете найти ответ, особенно если вы создали файл для вывода и предпочитаете четкую альтернативу echo "hi" | grep "use this hack to hide the oputut :) "

4 голосов
/ 11 декабря 2014

Попробуйте с:

myprogram &>/dev/null

чтобы не выводить

0 голосов
/ 22 августа 2018

Примечание. Этот ответ связан с вопросом «Как отключить эхо при выполнении сценария оболочки Linux», который, в свою очередь, помечен как дублированный на этот.

Чтобы фактически отключить эхо, введите команду:

stty -echo

(это, например, когда вы хотите ввести пароль и не хотите, чтобы он был читабельным. Не забудьте включить эхо в конце вашего скрипта, иначе тот, кто запускает ваш скрипт, не будет посмотрите, что он / она набирает с этого момента, чтобы включить эхо при запуске:

стое эхо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...