Mam skrypt, w którym sprawdza, czy pakiet jest zainstalowany, czy nie i czy port 8080 jest używany przez określony proces, czy nie. W ogóle nie mam doświadczenia z bash, więc zrobiłem coś takiego:
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...
Jednak po uruchomieniu skryptu otrzymuję zarówno dane wyjściowe, jak dpkg -s net-tools
i dane netstat -tlpn | grep 8080 | grep java
wyjściowe w terminalu, i nie chcę tego, w jaki sposób mogę ukryć dane wyjściowe i po prostu trzymać się wyniku if
s?
Czy jest też bardziej elegancki sposób na robienie tego, co robię? Czy istnieje bardziej elegancki sposób, aby dowiedzieć się, jaki proces wykorzystuje port 8080 (nie tylko jeśli jest używany), jeśli taki istnieje?
grep -q
, a nowsze bash&> ...
jako synonim> ... 2>&1
netstat
. Czy jest jakiś sposób, żeby to ukryć?lsof -i :<portnumnber>
powinien być w stanie zrobić coś zgodnie z tym, czego chcesz.źródło
fuser -n tcp 8080
wyprowadzenie danych wyjściowych.Chociaż opróżnianie danych wyjściowych
/dev/null
jest prawdopodobnie najłatwiejszym sposobem, czasami/dev/null
ma ustawione uprawnienia do plików, aby użytkownik inny niż root nie mógł tam opróżnić danych wyjściowych. Więc innym sposobem na zrobienie tego jest:Ta podwójna
grep
konfiguracja znajduje w nich pasujące linie,abc
a ponieważ-o
jest ustawiona TYLKOabc
jest drukowana i tylko z tego powodu-m 1
. Następnie dane wyjściowe, które są albo puste, alboabc
są wysyłane do grep, aby znaleźć tylko te części łańcucha, które pasują,123
a ponieważ ostatnie polecenie wyświetla tylkoabc
puste ciąg, zwracany jest ciąg. Mam nadzieję, że to pomaga!źródło