GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Saya Tidak Dapat Mendapatkan Output Pgrep Tepat Untuk Variabel Pada Skrip Bash?

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 beberapa compton proses yang sekarang telah dimatikan, atau setidaknya diberi sinyal, dan exec compton -b tidak akan dieksekusi.

  • Jika pkill compton gagal (tidak ada proses yang cocok dengan namanya, atau ada kesalahan internal di pkill ), isi if pernyataan akan memanggil exec compton -b . Anda , yang akan menggantikan proses shell dengan proses yang dihasilkan dari menjalankan compton -b .


Linux
  1. Mengapa Skrip Bash Tidak Mengenal Alias?

  2. Mengapa Mengatur Variabel Sebelum Perintah Legal Di Bash?

  3. Mengapa Saya Tidak Dapat Menggunakan Cd Dalam Skrip Bash??

  1. Tidak Dapat Mendapatkan Kode Keluar yang Tepat Dari Script?

  2. Mengapa Saya Tidak Dapat Keluar dari Spasi Pada Skrip Bash??

  3. Cetak output dari pernyataan cat dalam loop skrip bash

  1. Cara mendapatkan PID dari proses anak bercabang di skrip Shell

  2. Gunakan variabel Bash dalam skrip sbatch SLURM

  3. Mengapa cat /dev/urandom menggantung skrip bash saya?