Domanda

Sto cercando di scrivere uno script per lanciare XFCE e XBMC nelle proprie sessioni X.

Per fare ciò Sto impostando il valore DISPLAY, eseguendo il primo in background e in attesa finché non ricevo un ritorno di successo da xset q. Quindi cambio DISPLAY e faccio lo stesso per l'altro.

Sto scrivendo questo pezzo per pezzo per verificare che ho la sintassi destra per ogni parte e la parte in cui sono bloccato è il 'Aspettando finché non ricevo un ritorno di successo da xset q.

export DISPLAY=":0.0"
while [[ ! `xset q` ]]
do
  echo -n "."
done
.

Questo codice sembra funzionare così quando Xfce è in esecuzione, usciti immediatamente e quando non si siede di stampare .xset: unable to open display ":0.0"

Comunque non voglio vedere l'output di xset, quindi sto cercando di reindirizzare la sua output.

export DISPLAY=":0.0"
while [[ ! `xset q > /dev/null 2>&1` ]]
do
  echo -n "."
done
.

Aggiunta di questo reindirizzamento tuttavia sembra interrompere il rilevamento e indipendentemente dal fatto che XFCE sia in esecuzione o non si siede solo dei punti di stampa.

Ho testato i due comandi da soli e in uno script di shell da soli, entrambi funzionano come mi aspetto, restituire 1 quando Xfce non è in esecuzione e 0 quando è.

Qualcuno può spiegare perché mettere quel comando all'interno del [[ ! `…` ]] rompe il test while e come potrei riscrivere questo ciclo while correttamente?

(in esecuzione sull'arco)

È stato utile?

Soluzione

Il problema è che non stai testando il codice di ritorno di xset, si elabora la sua output.Quando reindirizza l'uscita su /dev/null, l'espressione in Backtterys non restituisce nulla, è come se avessi:

while [[ ! '' ]] ...
.

che eseguirà sempre il corpo while.

Cosa dovresti fare è:

while ! xset q > /dev/null 2>&1 
do 
  ...
done
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top