Скрытие вывода команды

У меня есть скрипт, где он проверяет, установлен ли пакет или нет, и используется ли порт 8080 определенным процессом или нет. У меня совсем нет опыта работы с bash, поэтому я сделал что-то вроде этого:

if dpkg -s net-tools; then
    if  netstat -tlpn | grep 8080 | grep java; then
        echo "Shut down server before executing this script"
        exit
    fi
else
    echo "If the server is running please shut it down before continuing with the execution of this script"
fi

# the rest of the script...

Однако, когда скрипт выполняется, я получаю в терминале и выходы dpkg -s net-tools, и netstat -tlpn | grep 8080 | grep java, и я не хочу этого, как я могу скрыть вывод и просто придерживаться результата if с?

Кроме того, есть ли более элегантный способ сделать то, что я делаю? И есть ли более элегантный способ узнать , какой процесс использует порт 8080 (не только если он используется), если таковой имеется?

31
задан 30 May 2014 в 21:44

3 ответа

Скрывать вывод любой команды обычно stdout и stderr перенаправляются к /dev/null.

command > /dev/null 2>&1

Объяснение:

1.command > /dev/null: перенаправляет вывод command(stdout) к /dev/null
2.2>&1: перенаправления stderr кому: stdout, так ошибки (если таковые имеются) также переходит в /dev/null

Примечание:

&>/dev/null: перенаправления оба stdout и stderr кому: /dev/null. можно использовать его в качестве альтернативы /dev/null 2>&1

Тихий grep: grep -q "string" соответствуйте строке тихо или бесшумно ни с чем к стандартному выводу. Это также может использоваться для сокрытия вывода.

В Вашем случае можно использовать его как,

if dpkg -s net-tools > /dev/null 2>&1; then
    if  netstat -tlpn | grep 8080 | grep java > /dev/null 2>&1; then
    #rest thing
else
    echo "your message"
fi

Здесь, если условия будут проверены, как это было прежде, но не будет никакого вывода.

Ответ на комментарий:

netstat -tlpn | grep 8080 | grep java > /dev/null 2>&1: Это перенаправляет вывод, повышенный от grep java после второго канала. Но сообщение Вы добираетесь от netstat -tlpn. Решением является второе использование if как,

if  [[ `netstat -tlpn | grep 8080 | grep java` ]] &>/dev/null; then
52
ответ дан 30 May 2014 в 21:44

lsof -i :<portnumnber> должен смочь сделать что-то вроде того, что Вы хотите.

2
ответ дан 30 May 2014 в 21:44

При сбрасывании вывода к /dev/null вероятно, самый легкий путь, иногда /dev/null установили полномочия файла так, чтобы некорневой не мог сбросить вывод там. Так, другой некорневой способ сделать это

command | grep -m 1 -o "abc" | grep -o "123"

Это удваивается -grep установка находит согласующие отрезки длинной линии с abc в них и с тех пор -o установлен ТОЛЬКО abc печатается и только однажды из-за -m 1. Затем вывод, который или пуст или abc отправляется в grep для нахождения только частей строки, которые соответствуют 123 и начиная с последней команды только выводы abc пустая строка возвращается. Надежда, которая помогает!

0
ответ дан 30 May 2014 в 21:44

Другие вопросы по тегам:

Похожие вопросы: