Executando CAT em SCREEN sem saída para arquivo

Executando CAT em SCREEN sem saída para arquivo

Estou tentando codificar este comando para ser executado na tela junto com outros dois que serão usados cat​​para ler um arquivo e, em seguida, canalizá-lo awkpara 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 que está desanexada vejo ela filtrando a lista, quando completa o arquivo first.txté criado mas vazio. Eu vi algo sobre como usar -La tela para um log de saída, mas quero que a saída vá para a mesma pasta em que a lista não filtrada está e chame first.txt, não consigo entender por que ele será executado com êxito, mas o arquivo de saída está sempre vazio. Se eu executá-lo sem screen -d -mo arquivo criado não fica vazio. Acho que estou faltando alguma coisa no comando screen. Acabei de começar a usar a tela. Não tenho certeza de quando mais postar.

Responder1

A razão pela qual isso não funciona é 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 screenfuncionamento é realizado catem um local separado. Não há então nenhuma saída emsaída padrãopara canalizar para awk.

Se você deseja que o pipe seja executado na tela, você precisa 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 cate, 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 todo o comando (e principalmente $1contra avaliações iniciais).

informação relacionada