Pergunta

Estou tentando escrever um script para iniciar o xfce e o xbmc em suas próprias sessões x.

Para fazer isso estou configurando o DISPLAY valor, executando o primeiro em segundo plano e aguardando até obter um retorno bem-sucedido de xset q.Então eu mudo DISPLAY e faça o mesmo com o outro.

Estou escrevendo isso peça por peça para verificar se tenho a sintaxe correta para cada parte e a parte em que estou preso é 'esperar até obter um retorno bem-sucedido de xset q.

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

Este código parece funcionar, então quando o XFCE está em execução ele sai imediatamente e quando não está, ele fica imprimindo .xset: unable to open display ":0.0"

No entanto, não quero ver a saída de xset então estou tentando redirecionar sua saída.

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

Adicionar esse redirecionamento, no entanto, parece interromper a detecção e, independentemente de o XFCE estar em execução ou não, ele apenas fica imprimindo pontos.

Eu testei os dois comandos por conta própria e em um script de shell por conta própria, ambos funcionam como esperado, retornando 1 quando o XFCE não está em execução e 0 quando está.

Alguém pode explicar por que colocar esse comando dentro de [[ ! `…` ]] quebra o while teste e como eu poderia reescrever isso while loop corretamente?

(Executando no Arch)

Foi útil?

Solução

O problema é que você não está testando o código de retorno de xset em tudo, você processa sua saída.Quando você redireciona a saída para /dev/null, a expressão em crases não retorna nada, é como se você tivesse:

while [[ ! '' ]] ...

que sempre executará o while corpo.

O que você deveria fazer é:

while ! xset q > /dev/null 2>&1 
do 
  ...
done
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top