Saya mencoba membuat skrip untuk keluar dari compton jika sedang berjalan atau memulainya jika tidak berjalan. Saya telah membaca dari man bahwa itu harus keluar 1 jika proses ditemukan, jadi saya sudah mencoba membuat skrip yang menggunakan itu ... Namun ini tidak berhasil, Ini dimulai jika ditutup tetapi tidak menutupnya. apa yang saya lakukan salah??
#!/bin/bash
status=$(pgrep compton 2>&1)
if [[ $status == 1 ]];
then
killall compton
else
exec compton -b
fi
echo $status
Jawaban yang Diterima:
Anda adalah mendapatkan pgrep output di status . Anda variabel. Ini bukan keluaran yang Anda harapkan.
pgrep mengeluarkan ID proses (PID) dari proses yang cocok dengan pola yang Anda berikan. Jika ada proses yang namanya cocok dengan compton , lalu $status akan menjadi PID dari proses itu, atau dari proses tersebut. pgrep juga mengembalikan status keluar, tetapi status keluar tidak ditangkap oleh substitusi perintah sebagai string.
Dalam pengujian Anda, Anda membandingkan $status melawan 1 . Tidak mungkin compton memiliki PID 1.
Jika Anda ingin membunuh compton any proses jika ada, dan mulai compton -b jika tidak ada compton proses ada, Anda dapat melakukannya dengan
#!/bin/sh
if ! pkill compton; then
exec compton -b
fi
Ini menggunakan status keluar dari pkill . pkill alat bekerja dengan cara yang setara dengan pgrep (biasanya didistribusikan dan dipasang sebagai pasangan) tetapi alih-alih mengeluarkan PID dari proses yang cocok seperti pgrep akan melakukannya, pkill mengirimkan TERM sinyal (secara default) ke proses pencocokan.
if kata kunci menggunakan status keluar dari perintah yang Anda gunakan dengannya.
! membalikkan arti pengujian sehingga
-
Jika
pkill comptonberhasil, berarti ada ada satu atau beberapacomptonproses yang sekarang telah dimatikan, atau setidaknya diberi sinyal, danexec compton -btidak akan dieksekusi. -
Jika
pkill comptongagal (tidak ada proses yang cocok dengan namanya, atau ada kesalahan internal dipkill), isiifpernyataan akan memanggilexec compton -b. Anda , yang akan menggantikan proses shell dengan proses yang dihasilkan dari menjalankancompton -b.