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

У меня есть скрипт, в котором он проверяет, установлен ли пакет или нет, и используется ли порт 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    fielse    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 (не только если он используется), если таковой имеется?

Чтобы скрыть вывод любой команды, обычно используется 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 thingelse    echo "your message"fi

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

Ответ на как:

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

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

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

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

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