
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 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 que está desanexada vejo ela filtrando a lista, quando completa o arquivo first.txt
é criado mas vazio. Eu vi algo sobre como usar -L
a 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 -m
o 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 screen
funcionamento é realizado cat
em 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 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 todo o comando (e principalmente $1
contra avaliações iniciais).