J'ai un script où il vérifie si un package est installé ou non et si le port 8080 est utilisé par un processus particulier ou non. Je ne suis pas du tout expérimenté avec bash, alors j'ai fait quelque chose comme ça:
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...
Cependant, lorsque le script est exécuté, j'obtiens à la fois les sorties dpkg -s net-tools
et les netstat -tlpn | grep 8080 | grep java
sorties dans le terminal, et je ne le veux pas, comment puis-je masquer la sortie et simplement m'en tenir au résultat du if
s?
Existe-t-il également une manière plus élégante de faire ce que je fais? Et existe-t-il un moyen plus élégant de savoir quel processus utilise le port 8080 (pas seulement s'il est utilisé), le cas échéant?
grep -q
, et le nouveau bash&> ...
comme synonyme de> ... 2>&1
netstat
. Y a-t-il un moyen de cacher ça aussi?lsof -i :<portnumnber>
devrait être capable de faire quelque chose dans le sens de ce que vous voulez.la source
fuser -n tcp 8080
dont la sortie peut être plus facile à analyser.Bien que le vidage de la sortie vers
/dev/null
soit probablement le moyen le plus simple,/dev/null
des autorisations de fichier sont parfois définies pour que les non-root ne puissent pas vider la sortie à cet endroit. Donc, une autre façon non root de le faire est deCette double
grep
configuration trouve les lignes correspondantes avecabc
et puisqu'elle-o
est définie, UNIQUEMENTabc
est imprimé et une seule fois à cause de-m 1
. Ensuite, la sortie qui est soit vide soitabc
envoyée à grep pour trouver uniquement les parties de la chaîne qui correspondent123
et puisque la dernière commande ne produit queabc
la chaîne vide est retournée. J'espère que ça t'as aidé!la source