У меня есть скрипт, где он проверяет, установлен ли пакет или нет, и используется ли порт 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
s?
Кроме того, есть ли более элегантный способ сделать то, что я делаю? И есть ли более элегантный способ узнать, какой процесс использует порт 8080 (не только, если он используется), если таковой имеется?
grep -q
и новый bash&> ...
в качестве синонима> ... 2>&1
netstat
. Есть ли способ, которым я мог бы это тоже скрыть?lsof -i :<portnumnber>
должен быть в состоянии сделать что-то в соответствии с тем, что вы хотите.источник
fuser -n tcp 8080
, чей вывод может быть легче проанализировать.Хотя очистка вывода,
/dev/null
вероятно, является самым простым способом, иногда/dev/null
устанавливаются разрешения для файлов, так что некорневые пользователи не могут очищать вывод там. Итак, еще один не-root способ сделать этоЭта двойная
grep
установка находит в них совпадающие строки,abc
и поскольку-o
она установлена ТОЛЬКО дляabc
печати, то только один раз из-за-m 1
. Затем возвращается вывод, который либо пуст, либоabc
отправляется в grep, чтобы найти только те части строки, которые совпадают,123
а поскольку последняя команда выводит толькоabc
пустую строку, возвращается. Надеюсь, это поможет!источник