Как отключить вывод в Bash script?

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

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

% myprogram
% WELCOME TO MY PROGRAM
% Done.

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

#!/bin/bash
myprogram > sample.s

Ответ 1

Если он выйдет на 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

Ответ 2

Перенаправить stderr на стандартный вывод

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

2>&1

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

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

myprogram > sample.s

Перенаправить stderr и stdout в файл

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

myprogram > sample.s 2>&1

Перенаправить stderr и stdout в /dev/null

Перенаправьте на /dev/null, если вы хотите полностью замолчать свое приложение.

myprogram >/dev/null 2>&1

Ответ 3

Весь вывод:

scriptname &>/dev/null

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

scriptname >/dev/null 2>&1

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

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

Для более новых bash (нет портативных):

scriptname &>-

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

Попробуйте:

myprogram &>/dev/null

чтобы получить выходной файл

Ответ 7

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

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

stty -echo

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

стое эхо