Tengo un script donde comprueba si un paquete está instalado o no y si el puerto 8080 está siendo utilizado por un proceso en particular o no. No tengo experiencia con bash, así que hice algo como esto:
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...
Sin embargo, cuando se ejecuta el script, obtengo tanto las salidas dpkg -s net-tools
como las netstat -tlpn | grep 8080 | grep java
salidas en el terminal, y no quiero eso, ¿cómo puedo ocultar la salida y simplemente seguir con el resultado de la if
s?
Además, ¿hay una forma más elegante de hacer lo que estoy haciendo? ¿Y hay una manera más elegante de saber qué proceso está usando el puerto 8080 (no solo si se está usando), si lo hay?
grep -q
, y la nueva fiesta&> ...
como sinónimo de> ... 2>&1
netstat
. ¿Hay alguna forma de que yo pueda ocultar eso también?lsof -i :<portnumnber>
debería poder hacer algo similar a lo que quieres.fuente
fuser -n tcp 8080
, cuya salida puede ser más fácil de analizar.Si bien el vaciado de la salida
/dev/null
es probablemente la forma más fácil, a veces/dev/null
tiene permisos de archivo establecidos para que no root no pueda vaciar la salida allí. Entonces, otra forma no raíz de hacer esto es medianteEsta
grep
configuración doble encuentra las líneas que coinciden conabc
ellas y, dado que-o
se establece SOLO,abc
se imprime y solo una vez debido a-m 1
. Luego, la salida que está vacía oabc
se envía a grep para encontrar solo las partes de la cadena que coinciden123
y, dado que el último comando solo generaabc
la cadena vacía, se devuelve. ¡Espero que ayude!fuente