Esegui il comando shell in subshell o in background?


1

In realtà lavoro principalmente con Ruby, ma ora ho creato un file di script bash. Da questo file di script sto visualizzando i messaggi sullo schermo. Ecco il mio scenario.

ho usato aosd_cat modulo per la visualizzazione dei messaggi sullo schermo e l'ho fatto con successo. Per questo ho usato il loro documentazione .

Ecco il mio message.sh file di script:

#!/bin/bash
function message_1(){
  if [ condition ]
    echo 'message -1' | DISPLAY=:0 aosd_cat -u 10000 -e 2 -t 2 -R 'Green' -n 'Arial Bold 20' -p 0 -x 10 -y 60
  else
    echo 'message -4' | DISPLAY=:0 aosd_cat -u 10000 -e 2 -t 2 -R 'Green' -n 'Arial Bold 20' -p 0 -x 10 -y 60
  fi
}

function message_2(){
  echo 'message -2' | DISPLAY=:0 aosd_cat -u 10000 -e 2 -t 2 -R 'Green' -n 'Arial Bold 20' -p 0 -x 10 -y 60
}

function message_3(){
  echo 'message -3' | DISPLAY=:0 aosd_cat -u 10000 -e 2 -t 2 -R 'Green' -n 'Arial Bold 20' -p 0 -x 10 -y 60
}

# As I have to display messages continuously
while true
do
  message_1
  message_2
  message_3
done

Dopo l'esecuzione, ho notato che i messaggi vengono visualizzati uno alla volta (messaggio_1 sta visualizzando prima poi message_2 e poi message_3).

Devo visualizzare tutti i messaggi allo stesso tempo. Per ottenere ciò penso di poter eseguire quei comandi in sottoshell / come sottoprocesso / in background (quindi non ha effetto su altri processi).

Nel rubino abbiamo comando di sistema che esegue il comando dato in una subshell. Come posso ottenere questo tipo di funzionalità nel file di script di bash?

Risposte:


2

Puoi farlo in questo modo:

  bash -c command

ma nel tuo caso è forse sufficiente inviare il comando allo sfondo:

  command &

mentre eseguo questi comandi continuamente, si sovrascrivono o si sostituiscono a vicenda durante l'esecuzione. Inoltre ho modificato la mia domanda per favore guarda in questo
Shrikant1712
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.