Saya memiliki konfigurasi pemula untuk layanan yang perlu memeriksa keberadaan proses pada startup itu. Ini kedengarannya cukup mudah tetapi saya sudah mencoba selama 3 jam untuk menyelesaikan masalah ini dan saya tersesat. Masalahnya tampaknya bahwa beberapa pernyataan grep menyebabkan keluarnya skrip dalam pemula, yang menyebabkan kegagalan dalam memulai layanan. Tetapi pemula tidak mencatat apa-apa, itu hanya keluar dari skrip dan hilang.
Berikut ini adalah beberapa contoh baris yang memicu masalah: Gema pertama dan keluaran grepnya dicatat, gema kedua dicatat, tetapi bukan keluaran grepnya. Setelah gema kedua baru saja keluar dari skrip dan berhenti. Masalahnya adalah menambahkan opsi -v atau sesuatu yang lain seperti menggunakan kelas regexp seperti [[: digit:]]. Sepertinya saya perlu melarikan diri beberapa karakter tetapi saya tidak tahu caranya. -V sederhana atau sesuatu seperti itu tidak berhasil.
script
echo grep
ps ax | grep "postgres: wal writer process" | grep "grep"
echo grep2
ps ax | grep "postgres: wal writer process" | grep -v "grep"
end script
Adakah yang tahu apa yang saya lakukan salah dan bagaimana cara memperbaikinya?
grep foo bar; if [ $? = 0 ]; then ...
untuk yang lebih sederhana, lebih kuat, dan lebih idiomatisif grep foo bar; then ...
if [ ps ax | grep "postgres: wal writer process" | grep -v "grep" ]
atauif [ ps ax | grep "[p]ostgres: wal writer process" ]
bahkan tanpa [] membentuk if dan lolos | atau [p] untuk bekerja.if ps aux | grep "[p]ostgres: wal writer process"; then ...
dan perhatikan khususnya tidak adanya tanda kurung di sekitar perintah.