Как сделать конвейерный bash-скрипт - PullRequest
0 голосов
/ 23 июня 2018

Я работаю над пакетом bash, который называется Tools, и пытаюсь создать сценарий bash, через который вы можете передать все выходные команды в /dev/null.

Пример:

cat myfile | null

null - команда в Инструментах.

И тогда ничего не будет выведено.Я знаю, как перенаправить вывод в / dev / null или другие места, но как мне сделать сценарий с поддержкой конвейеров, чтобы сделать это.

Мой текущий код заполнителя:

#!/bin/bash
sudo $1 &> /dev/null

Формат выполнения:

null cat\ myfile 

Обратная косая черта является escape-символом, поэтому bash знает, что это один аргумент, а не два;Аргументы обычно разделяются пробелами

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

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

exec >/dev/null

И если вы хотите также использовать nuder stderr,

exec >/dev/null 2>/dev/null

Обратите внимание, что exec без команды делает его перенаправления применимыми к оставшейся частисценария.

0 голосов
/ 23 июня 2018

Чтобы это работало:

somecommand | null

Вам просто нужно, чтобы ваш null скрипт содержал:

cat > /dev/null

cat читает из стандартного ввода и пишет в стандартный вывод, который в этом случае вы перенаправили на /dev/null.

Обратите внимание, что это не будет перенаправлять stderr, потому что символ канала (|) перенаправляет только stdout. Вы можете использовать |& для перенаправления как stdout, так и stderr, например:

somecommand |& null

Реальный вопрос, однако, зачем беспокоиться об этом? Вы также можете легко запустить:

somecommand > /dev/null

Или:

somecommand >& /dev/null

UPDATE

Ух, баш 3.2? Это слишком старо. Эта версия bash не поддерживает оператор |&. Вы можете сделать то же самое, как это:

somecommand 2>&1 | null

Там написано "перенаправить stderr в stdout, а затем перенаправить stdout в канал".

...