Executando o CAT no SCREEN sem saída para o arquivo

1

Estou tentando codificar este comando para ser executado na tela, juntamente com outros 2 que usarão cat para ler um arquivo e enviá-lo para awk para filtragem. Aqui está o comando;

screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt | awk '{print $1}' > /var/www/html/filter/first.txt

Se eu verificar a tela desanexada, vejo a filtragem da lista, quando ela for concluída, o arquivo first.txt será criado, mas estará vazio. Eu vi algo sobre o uso de -L na tela para um log de saída, mas eu quero que a saída vá para a mesma pasta na lista não filtrada e chamada first.txt , não consigo descobrir por que ela será executada com sucesso, mas a saída o arquivo está vazio toda vez. Se eu executar sem screen -d -m , o arquivo criado não está vazio. Eu acho que estou faltando alguma coisa com o comando screen. Eu acabei de começar a usar a tela. Não tenho certeza quando mais postar.

    
por LinHost 14.05.2015 / 22:44

1 resposta

3

A razão pela qual isso não funcionará é que o shell divide o comando em duas partes como esta:

screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt

awk '{print $1}' >/var/www/html/filter/first.txt

O screen é executado em cat em um arquivo separado. Não há saída em stdout para pipe até awk .

Se você quiser que o pipe seja executado na tela, será necessário agrupá-lo com outra instância de um shell:

screen -d -m bash -c 'cat /var/www/html/filter/unfiltered.txt | awk "{print $1}" >/var/www/html/filter/first.txt'

Feito isso, deve ficar claro que este é um uso desnecessário de cat e, na verdade, o comando pode ser simplificado assim:

screen -d -m bash -c 'awk "{print $1}" </var/www/html/filter/unfiltered.txt >/var/www/html/filter/first.txt'

Observe que mudei as aspas internas de simples para duplas. Isso ocorre porque usei aspas simples para proteger o comando inteiro (e particularmente $1 da avaliação inicial).

    
por 14.05.2015 / 23:21