У меня есть программа, которая выводит на стандартный вывод и хотела бы отключить этот вывод в скрипте Bash при передаче в файл.
Например, запуск программы выведет:
% myprogram
% WELCOME TO MY PROGRAM
% Done.
Я хочу, чтобы следующий скрипт ничего не выводил на терминал:
#!/bin/bash
myprogram > sample.s
Ответы:
Если он также выводит на stderr, вы захотите замолчать. Вы можете сделать это, перенаправив дескриптор файла 2:
источник
&>
намного старше, чем bash 4.&>
введение документирования журнала изменений ? : o>>&
было введено в 4.0. Там нет упоминаний,&>
но ИЗМЕНЕНИЯ возвращаются только к 2.0, так что я думаю, что это означает, что это было уже в 1.x.git blame
на ,redir.c
указует на 1998 коммиты старейшего появления еще в текущем коде.Перенаправить stderr на стандартный вывод
Это перенаправит stderr (который является дескриптором 2) в файловый дескриптор 1, который является stdout.
Перенаправить стандартный вывод в файл
Теперь, когда вы выполняете это, вы перенаправляете стандартный вывод в файл.
sample.s
Перенаправить stderr и stdout в файл
Объединение двух команд приведет к перенаправлению как stderr, так и stdout в sample.s
Перенаправить stderr и stdout в / dev / null
Переадресация,
/dev/null
если вы хотите полностью замолчать ваше приложение.источник
myprogram >/dev/null 2>&1
(обратите внимание на клин до/dev/null
и порядок перенаправлений).myprogram &>/dev/null
будет достаточно?Весь вывод:
Портативный:
Портативный:
Для более новой версии bash (без переноса):
источник
-
и&>
является непереносимым расширением оболочки Bourne.echo moo 1>&-
вызывает ошибку, потому что дескриптор файла 1 закрыт:-bash: echo: write error: Bad file descriptor
Если вы хотите, чтобы STDOUT и STDERR оба [все], то самый простой способ:
затем запустите его, как
./script
, и вы не получите вывод на свой терминал. :)«> &» означает STDERR и STDOUT.
&
также работает так же , как с трубкой:./script |& sed
что будет посылать все , чтобы СЭДисточник
a 2>&1 | b 2>&1 | c
Если вы все еще не можете найти ответ, особенно если вы создали файл для вывода и предпочитаете четкую альтернативу:
echo "hi" | grep "use this hack to hide the oputut :) "
источник
Попробуйте с:
не получить выхода
источник
Примечание. Этот ответ связан с вопросом «Как отключить эхо при выполнении сценария оболочки Linux», который в свою очередь был помечен как дублированный на этот.
Чтобы фактически отключить эхо, команда:
(это, например, когда вы хотите ввести пароль и не хотите, чтобы он был читабельным. Не забудьте включить эхо в конце вашего скрипта, иначе человек, который запускает ваш скрипт, не увидит, что он / она набирает с этого момента. Чтобы включить эхо при запуске:
источник
Полезно в скриптах:
Получить только STDERR в файле, при этом скрывая любой STDOUT, даже если скрываемая программа вообще не существует (никогда не вешает родительский скрипт), это одно работало:
Полностью отсоедините и отключите все, даже уничтожение родительского сценария не прервет
./prog
:источник
Для вывода только при ошибке :
источник