Como passar um log de variável como um argumento para um script?

0

Estou tentando passar um log como um argumento para um script que faz o seguinte:

#!/bin/bash
filter(){

grep -E "ERROR|FATAL|WARN|Caused|^[[:space:]]" /app/me/logs/$1

}

#read varName

filter > /app/me/logs/${1}.filtered

cat /app/me/logs/${1}.filtered

mas não está emitindo nada, e o arquivo de log criado não contém nada. O comando que eu passo é assim:

>>> log_filter test.log

log_filter é o nome do script e test.log é o log de argumento que eu quero filtrar como você pode ver eu escrevi "ler varName" isso funciona se eu passar varName em vez de $ 1 em cada um, mas eu não quero isso.

    
por Abdallah Qaraeen 17.10.2016 / 19:48

1 resposta

3

Alterar:

filter > /app/me/logs/${1}.filtered

para:

filter "$@" > "/app/me/logs/${1}.filtered"

Por quê? Cada função tem sua própria lista de parâmetros posicionais. Você precisa fornecer a lista de parâmetros posicionais para a função que está chamando.

Em outras palavras:
O $1 dentro da função filter não é o mesmo que o $1 no script principal.

Se apenas um parâmetro é o que você precisa:

filter "$1" > "/app/me/logs/${1}.filtered"

deve ser apenas o suficiente.

    
por 17.10.2016 / 19:55