Perché la produzione di reindirizzamento influisce sul risultato di un test in Bash?
-
11-12-2019 - |
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)
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
.