problemas com o GNU tail -f e combinação de comandos

3
$ tail -f /logs/filename.log | awk '!(/list)'

Eu posso executar este comando no sabor do GNU Linux

Mas quando escrevo em um script, não está funcionando.

test.ksh:

variable="/logs/filename.log | awk '!(/list)'" 
tail -f $var

Obtendo o erro como

tail: cannot open '|' for reading: No such file or directory
tail: cannot open 'grep' for reading: No such file or directory
tail: cannot open 'list' for reading: No such file or directory

Como é necessário trabalhar nisso? Alguém pode orientar isso?

    
por Manoj 27.04.2012 / 14:36

2 respostas

1

Seu código está quebrado de duas maneiras ...

  • Defina uma variável com o nome variable e, em seguida, chame-a com o nome var . Isso não vai funcionar.

  • Eu não consigo entender o que você estava tentando realizar com a variável, porque a citação é muito maluca. O interpretador terá mais problemas do que eu fiz ;-) Na verdade, você está enviando uma string que se parece com um conjunto de comandos incluindo um pipeline - mas como eles estão dentro de uma string citada como um argumento para outro comando, eles só vai se deparar com tantos caracteres em uma bolha de texto como um argumento. Não é algo que o intérprete vai tocar.

Talvez você queira algo assim em seu arquivo test.ksh :

#!/bin/ksh
log_file="/logs/filename.long"
tail -f $log_file | awk '!(/list)'

Ou até mesmo isso que você executaria com um comando como ./test.ksh /logs/filename.log :

#!/bin/ksh
tail -f $1 | awk '!(/list)'
    
por 27.04.2012 / 14:45
0

Você escreveu 2 coisas diferentes.

No shell, você afirmou que a saída de tail -f é redirecionada para awk

Em seu script, você afirmou que tail -f deve ler os dados dos arquivos chamados "/logs/filename.log", "|", "awk" e "! (/ list)"

Você quer escrever isso no seu arquivo de script:

#!/bin/ksh
variable="/logs/filename.log"
tail -f $variable | awk '!(/list)'
    
por 27.04.2012 / 14:49