Como executar um programa em uma tela, redirecionar toda a saída para um arquivo e desanexar

1

Executar um comando em uma tela e desanexar é bem simples.

screen -S test -d -m echo "output of command that runs forever"

No entanto, eu também gostaria de canalizar toda a saída para um arquivo para log, como pode executar o seguinte em uma tela e desanexar.

echo "output of command that runs forever" &> output.log

Editar:

Só para esclarecer, eu preciso disso para um script tão simples iniciar uma tela e executar o comando e desanexar não é uma opção.

    
por Fabian Barkhau 26.01.2016 / 21:47

3 respostas

4

screen -dmS workspace; screen -S workspace -X stuff $'ps aux > output-x\n'

Primeiro, criei uma sessão desanexada com a opção -d, liguei para o espaço de trabalho da minha sessão. Eu então envio meu comando para a mesma sessão com -X stuff, estou usando $ '', mas você também pode usar aspas duplas, mas tem que fazer um controle M ao invés de um \ n, o qual eu não gosto, então eu normalmente use o método que descrevi acima.

Depois que esse trecho de código for executado, você encontrará o output-x com a lista de processos e também se você fizer um:

tela -ls

você verá a sessão desanexada.

Desde que você disse que você vai estar executando um script. Você pode querer que seu script procure por uma sessão desanexada (estou usando a área de trabalho) e, se ela existir, enviar comandos para essa sessão pré-existente, em vez de fazer uma nova sessão toda vez que "screen -dmS sessionName" for executado, por exemplo está abaixo:

    #!/bin/bash
    if ! ( screen -ls | grep workspace > /dev/null); then
       screen -dmS workspace;
    fi
    screen -S workspace -X stuff $'ps aux > output-x\n'

Espero que isso ajude.

    
por 26.01.2016 / 22:55
1

Você pode agrupar seu comando em uma chamada bash (ou seu shell real) extra e fazer o redirecionamento lá:

$ screen -dm bash -c 'echo hello > ./out' ignoreme_arg
$ cat ./out
hello

Aqui ignoreme_arg significa o argumento chamado bash $0 .

    
por 01.12.2016 / 16:25
0
por 26.01.2016 / 21:52