Redirecionar a saída de erro do grep para o arquivo

1

Eu queria capturar em um arquivo os erros retornados na linha de comando de grep . Por exemplo,

grep foo.lookup
No such file in directory

Eu quero produzir isso para um arquivo de log. Este é o meu script de shell:

lookUpVal=1
var1=$(grep $lookUpVal foo.lookup) >>lookup.log 2>$1

Cria o arquivo lookup.log , mas não grava o erro nele.

    
por user60216 01.03.2014 / 05:24

2 respostas

1

Se eu entendi correto, você deseja capturar a saída de grep em uma variável e anexar qualquer erro ao arquivo de log.

Você poderia dizer:

var1=$(grep $lookUpVal foo.lookup 2>>lookup.log)

A sintaxe $(...) indica a substituição do comando, ou seja, gera o resultado do comando em uma variável. Por padrão, ele captura o STDOUT do comando na variável e o STDERR é impresso no console. Para redirecionar o STDERR para um arquivo, você precisaria realizar o redirecionamento dentro do próprio comando, ou seja, dentro de $(...) .

    
por 01.03.2014 / 07:07
2

grep foo.lookup não é um exemplo correto. Está faltando um argumento, seja um parâmetro de pesquisa ou um nome de arquivo.

Para capturar apenas as mensagens de erro que grep retorna para um arquivo, você pode fazer isso:

$ grep $lookUpVal foo.lookup 2> errors.log

Todos os erros são enviados para STDERR ( 2> ) enquanto todas as saídas são enviadas para STDOUT ( 1> ). Eles são combinados assim:

$ grep $lookUpVal foo.lookup > output.log 2>&1
    
por 01.03.2014 / 05:45