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 compton
berhasil, berarti ada ada satu atau beberapacompton
proses yang sekarang telah dimatikan, atau setidaknya diberi sinyal, danexec compton -b
tidak akan dieksekusi. -
Jika
pkill compton
gagal (tidak ada proses yang cocok dengan namanya, atau ada kesalahan internal dipkill
), isiif
pernyataan akan memanggilexec compton -b
. Anda , yang akan menggantikan proses shell dengan proses yang dihasilkan dari menjalankancompton -b
.