Eu tenho um script em que verifica se um pacote está instalado ou não e se a porta 8080 está sendo usada por um processo específico ou não. Não tenho experiência nenhuma com bash, então fiz algo assim:
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...
No entanto, quando o script é executado, recebo dpkg -s net-tools
as netstat -tlpn | grep 8080 | grep java
saídas e o terminal, e não quero isso, como posso ocultar a saída e ficar com o resultado dos if
s?
Além disso, existe uma maneira mais elegante de fazer o que estou fazendo? E existe uma maneira mais elegante de saber qual processo está usando a porta 8080 (não apenas se estiver sendo usada), se houver?
grep -q
, eo mais recente festa&> ...
como sinônimo de> ... 2>&1
netstat
. Existe alguma maneira de esconder isso também?lsof -i :<portnumnber>
deve ser capaz de fazer algo como o desejado.fonte
fuser -n tcp 8080
, cuja saída pode ser mais fácil de analisar.Embora liberar a saída para
/dev/null
provavelmente seja a maneira mais fácil, às vezes/dev/null
há permissões de arquivo definidas para que não-root não possam liberar a saída. Portanto, outra maneira não raiz de fazer isso éEssa
grep
configuração dupla localiza as linhas correspondentesabc
e, como-o
está APENAS definido,abc
é impressa e apenas uma vez por causa disso-m 1
. Em seguida, a saída que está vazia ouabc
é enviada ao grep para encontrar apenas as partes da string que correspondem123
e como o último comando apenas produzabc
a string vazia é retornada. Espero que ajude!fonte