Saya memiliki skrip tempat memeriksa apakah suatu paket diinstal atau tidak dan apakah port 8080 sedang digunakan oleh proses tertentu atau tidak. Saya tidak berpengalaman sama sekali dengan bash, jadi saya melakukan sesuatu seperti ini:
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...
Namun ketika skrip dieksekusi saya mendapatkan keduanya dpkg -s net-tools
dan netstat -tlpn | grep 8080 | grep java
output di terminal, dan saya tidak ingin itu, bagaimana saya bisa menyembunyikan output dan tetap dengan hasil dari if
s?
Juga, apakah ada cara yang lebih elegan untuk melakukan apa yang saya lakukan? Dan apakah ada cara yang lebih elegan untuk mengetahui proses apa yang menggunakan port 8080 (bukan hanya jika sedang digunakan), jika ada?
grep -q
, dan bash yang lebih baru&> ...
sebagai sinonim untuk> ... 2>&1
netstat
. Apakah ada cara saya bisa menyembunyikan itu juga?lsof -i :<portnumnber>
harus dapat melakukan sesuatu sesuai dengan yang Anda inginkan.sumber
fuser -n tcp 8080
, yang keluarannya mungkin lebih mudah diurai.Walaupun mem-flushing output ke
/dev/null
mungkin merupakan cara termudah, kadang-kadang/dev/null
memiliki hak akses file diatur sehingga non-root tidak dapat menyiram output di sana. Jadi, cara non-root lain untuk melakukan ini adalah dengangrep
Pengaturan ganda ini menemukan garis yang cocok denganabc
mereka dan karena-o
diatur HANYAabc
dicetak dan hanya sekali karena-m 1
. Kemudian output yang kosong atauabc
dikirim ke grep hanya menemukan bagian-bagian dari string yang cocok123
dan karena perintah terakhir hanya menghasilkanabc
string kosong dikembalikan. Semoga itu bisa membantu!sumber