Saya mencoba untuk memeriksa apakah suatu proses (menganggap itu disebut some_process
) berjalan di server. Jika ya, maka gema 1, jika tidak gema 0.
Ini adalah perintah yang saya gunakan tetapi hanya berfungsi sebagian (info lebih lanjut di bawah). Perhatikan bahwa saya perlu menulis skrip dalam satu baris.
ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi
Catatan: The [s]
dalam some_proces[s]
adalah untuk mencegah grep
dari kembali itu sendiri.
Jika some_process
sedang berjalan, maka "1"
akan digaungkan, yang baik-baik saja. Namun, jika some_process
tidak berjalan, tidak ada yang digema.
ps -Ccmd
untuk menemukan proses yang nama perintahnya "cmd", yang sepenuhnya dapat menghilangkangrep
.ps
akan menetapkan kode keluar ke beberapa nilai non-nol jika gagal menemukan proses yang cocok.Jawaban:
Tidak perlu memeriksa secara eksplisit
$?
. Kerjakan saja:Perhatikan bahwa ini bergantung pada gema yang tidak gagal, yang tentu saja tidak dijamin. Cara yang lebih dapat diandalkan untuk menulis ini adalah:
sumber
echo 1
gagal, makaecho 0
akan dieksekusi. Dalam hal ini, gema 1 tidak akan pernah gagal, tetapi Perhatikan bahwa A&& B || C tidak jika-maka-lain. C dapat berjalan ketika A benar. (Dari shellcheck ).if ps aux | grep some_proces[s]; then echo 1; else echo 0; fi
. Tampaknya itu bekerja untuk saya. Apakah karena OP memiliki pengalihan perintah yang dia coba?grep -q
atau dialihkan ke / dev / null).pgrep
.&&
berarti "dan jika berhasil"; dengan menempatkanif
pernyataan Anda di sebelah kanannya, Anda memastikan bahwa itu hanya akan berjalan jikagrep
kembali0
. Untuk memperbaikinya, gunakan;
:(atau hanya menggunakan line-break).
sumber
Gunakan
grep -vc
untuk mengabaikangrep
dalamps
output dan menghitung garis secara bersamaan.sumber
Anda dapat memanfaatkan sepenuhnya operator
&&
dan||
seperti ini:Untuk mengecualikan grep itu sendiri, Anda juga dapat melakukan sesuatu seperti:
sumber
lebih banyak oneliners di sini
sumber