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

Есть ли в командной строке ярлык для ">/dev/null 2> & 1"

На самом деле это раздражает, когда я не хочу видеть выход программы. Я хотел бы знать, есть ли более короткий способ написать:

$ program >/dev/null 2>&1

Общая оболочка - лучшая, но другие оболочки тоже будут интересны, особенно bash или тире.

4b9b3361

Ответ 1

>& /dev/null

Ответ 2

Вы можете написать для этого функцию:

function nullify() {
  "[email protected]" >/dev/null 2>&1
}

Чтобы использовать эту функцию:

nullify program arg1 arg2 ...

Конечно, вы можете назвать функцию так, как хотите. Например, это может быть один символ.

Кстати, вы можете использовать exec для перенаправления stdout и stderr на /dev/null временно. Я не знаю, поможет ли это в вашем случае, но я подумал о том, чтобы поделиться им.

# Save stdout, stderr to file descriptors 6, 7 respectively.
exec 6>&1 7>&2
# Redirect stdout, stderr to /dev/null
exec 1>/dev/null 2>/dev/null
# Run program.
program arg1 arg2 ...
# Restore stdout, stderr.
exec 1>&6 2>&7

Ответ 3

В bash, zsh и тире:

$ program >&- 2>&-

Он также работает в sh, потому что &- является файловым дескриптором.

Обратите внимание, что это решение закрывает дескрипторы файла, а не перенаправляет их на /dev/null, что может привести к остановке программ.

Ответ 4

Большинство оболочек поддерживают псевдонимы. Например, в моем .zshrc у меня есть такие вещи, как:

alias -g no='2> /dev/null > /dev/null' 

Затем я просто набираю

program no

Ответ 5

Также стоит отметить, что часто перенаправление вывода не всегда необходимо. Многие программы Unix и Linux принимают "молчащий флаг", обычно -n или -q, который подавляет любой вывод и возвращает значение только при успешном завершении или неудаче.

Например

grep foo bar.txt >/dev/null 2>&1
if [ $? -eq 0 ]; then
     do_something
fi

Можно переписать как

grep -q foo bar.txt
if [ $? -eq 0 ]; then
     do_something
fi

Ответ 6

Изменить: решения на основе (:) или |: фактически эквивалентны закрытию дескриптора файла: true не принимает входной файл.


  • Для всех оболочек:

    $ program 2>&1|:
    
  • Для bash и bash -сложных оболочек (zsh...):

    $ program &> >(:)
    OR
    $ program &> /dev/null
    

    Это не работает для тире, потому что он отказывается управлять правом подстановки процесса подстановки файла.

Пояснения:

  • 2>&1 перенаправляет stderr на stdout.
  • | является регулярным конвейером stdout для stdin другой команды.
  • : - это встроенная оболочка, которая ничего не делает (она эквивалентна true).
  • &> перенаправляет выходы stdout и stderr в файл.
  • >(your-command) - это замена процесса. Он заменяется на путь к специальному файлу, например: /proc/self/fd/6. Этот файл используется в качестве входного файла для команды your-command.

Ответ 7

Если /dev/null слишком много для ввода, вы можете (как root) сделать что-то вроде:

ln -s /dev/null /n

Тогда вы можете просто сделать:

program >/n 2>&1

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

Ответ 8

Решение Ayman Hourieh хорошо работает для одноразовых вызовов слишком частых программ. Но если есть только небольшой набор обычно называемых программ, для которых вы хотите отключить вывод, подумайте о том, чтобы отключить их, добавив следующее в ваш файл .bashrc (или эквивалент, если вы используете другую оболочку):

CHATTY_PROGRAMS=(okular firefox libreoffice kwrite)
for PROGRAM in "${CHATTY_PROGRAMS[@]}"
do
    printf -v eval_str '%q() { command %q "[email protected]" &>/dev/null; }' "$PROGRAM" "$PROGRAM"
    eval "$eval_str"
done

Таким образом, вы можете продолжать вызывать программы, используя их обычные имена, но их вывод stdout и stderr исчезнет в ведро бит.

Обратите внимание также, что определенные программы позволяют вам настроить, сколько выходов для протоколирования/отладки они выводят. Для приложений KDE вы можете запускать kdebugdialog и выборочно или глобально отключать вывод отладки.

Ответ 9

Мне кажется, что самым портативным решением и лучшим ответом будет макрос на вашем терминале (ПК).

Таким образом, независимо от того, к какому серверу вы входите, он всегда будет там.

Если вы запускаете Windows, вы можете получить желаемый результат с помощью AHK (google it, it opensource) в двух крошечных строках кода. Это может перевести любую строку ключей в любую другую строку ключей на месте.

Вы вводите "ugly.sh → NULL", и он будет переписывать его как "ugly.sh 2 > & 1 > /dev/null" или что нет.

Решения для других платформ несколько сложнее. AppleScript может вставлять нажатия клавиш, но не может быть легко запущен.