
Estoy intentando codificar este comando para que se ejecute en la pantalla junto con otros 2 que se usarán cat
para leer un archivo y luego canalizarlo awk
para filtrarlo. Aquí está el comando;
screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt | awk '{print $1}' > /var/www/html/filter/first.txt
Si reviso la pantalla que está separada veo que filtra la lista, cuando se completa, el archivo first.txt
está creado pero vacío. Vi algo sobre el uso -L
en pantalla para un registro de salida, pero quiero que la salida vaya a la misma carpeta en la que se encuentra la lista no filtrada y llame first.txt
, no puedo entender por qué se ejecutará correctamente, pero el archivo de salida está vacío cada vez. Si lo ejecuto sin screen -d -m
el archivo creado no está vacío. Creo que me falta algo con el comando de pantalla. Recién comencé a usar la pantalla. No estoy seguro de cuándo más publicar.
Respuesta1
La razón por la que esto no funcionará es que el shell divide el comando en dos partes de esta manera:
screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt
awk '{print $1}' >/var/www/html/filter/first.txt
Se screen
ejecuta cat
en una pty separada. Entonces no hay salida ensalida estándarpara canalizar a awk
.
Si desea que la tubería se ejecute bajo la pantalla, debe agruparla con otra instancia de un shell:
screen -d -m bash -c 'cat /var/www/html/filter/unfiltered.txt | awk "{print $1}" >/var/www/html/filter/first.txt'
Una vez hecho esto, debería quedar claro que se trata de un uso innecesario cat
y, de hecho, el comando se puede simplificar así:
screen -d -m bash -c 'awk "{print $1}" </var/www/html/filter/unfiltered.txt >/var/www/html/filter/first.txt'
Observe que he cambiado las comillas internas de simples a dobles. Esto se debe a que he utilizado comillas simples para proteger todo el comando (y particularmente $1
de la evaluación temprana).