script não vai para o fundo

1

Estou tentando escrever um script simples para enviar meu controle de movimento de salto. ativar o dispositivo envolve a ativação de um serviço e o início do painel de controle. O problema que estou tendo é que o serviço não vai para o segundo plano e não libera meu terminal.

O script é bastante simples e está na minha pasta $ USER.

#!/bin/bash
LeapControlPanel &
sudo leapd &

Ignore o material crítico do socket da web, garanto-lhe que o controlador funciona, o único problema, é que eu quero que o serviço retorne o meu prompt.

    
por j0h 28.12.2016 / 18:33

2 respostas

2

O script foi para o segundo plano e retornou seu prompt. O problema é que você não está redirecionando sua saída para qualquer lugar, de modo que ainda aparece no seu terminal. Enviar um comando para o segundo plano significa que ele continuará em execução e você poderá fazer outras coisas no shell pai. No entanto, como o comando está em execução, sua saída (stdout e stderr) ainda está conectada ao seu terminal atual e é por isso que você ainda os vê.

Então, para enviar um comando para o plano de fundo e ocultar sua saída, você precisa:

  1. Redirecionar stdout somente para que as mensagens de erro ainda sejam impressas no terminal:

    ./leap > leap.log &
    
  2. Redirecionar stderr apenas para que a saída, mas não os erros, ainda apareça no terminal:

    ./leap 2> leap.log &
    
  3. Redirecione ambos para que nada seja impresso no terminal:

    ./leap > leap.log 2>&1 &
    

    Ou (se o seu shell for compatível)

    ./leap &> leap.log &
    

Em todos os exemplos, para descartar a saída em vez de salvar em um arquivo, use /dev/null em vez de leap.log .

    
por terdon 28.12.2016 / 18:41
1

Fez retornar você ao prompt - está na segunda linha da sua captura de tela. As mensagens de erro apenas atrapalharam a exibição. Tente digitar um comando, você verá que funciona. Ou digite Enter para obter um novo prompt.

    
por AlexP 28.12.2016 / 18:39