Ich habe ein Skript, in dem überprüft wird, ob ein Paket installiert ist oder nicht und ob der Port 8080 von einem bestimmten Prozess verwendet wird oder nicht. Ich habe überhaupt keine Erfahrung mit Bash, also habe ich so etwas gemacht:
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...
Wenn das Skript ausgeführt wird, werden jedoch sowohl die dpkg -s net-tools
als auch die netstat -tlpn | grep 8080 | grep java
Ausgaben im Terminal angezeigt, und das möchte ich nicht. Wie kann ich die Ausgabe ausblenden und mich nur an das Ergebnis des if
s halten?
Gibt es auch eine elegantere Möglichkeit, das zu tun, was ich tue? Und gibt es eine elegantere Methode, um festzustellen, welcher Prozess den Port 8080 verwendet (nicht nur, wenn er verwendet wird), falls vorhanden?
grep -q
, und die neuere Bash&> ...
als Synonym für> ... 2>&1
netstat
. Kann ich das auch verstecken?lsof -i :<portnumnber>
sollte in der Lage sein, etwas nach Ihren Wünschen zu tun.quelle
fuser -n tcp 8080
, deren Ausgabe möglicherweise einfacher zu analysieren ist.Während das Leeren der Ausgabe auf
/dev/null
wahrscheinlich die einfachste Methode ist, sind manchmal/dev/null
Dateiberechtigungen festgelegt, sodass Nicht-Root-Benutzer die Ausgabe dort nicht leeren können. Ein anderer Weg, der nicht auf Root basiert, ist der vonDieses Doppel-
grep
Setup findet die übereinstimmenden Zeilen mitabc
in ihnen und da-o
NUR gesetztabc
ist, wird gedruckt und nur einmal wegen-m 1
. Dann wird die Ausgabe, die entweder leer ist oderabc
an grep gesendet wird, um nur die Teile der Zeichenfolge zu finden, die übereinstimmen,123
und da der letzte Befehl nurabc
die leere Zeichenfolge ausgibt, zurückgegeben. Hoffentlich hilft das!quelle