anexar termo de pesquisa a um nome de arquivo de log

0

Eu escrevi um script ( fetch.sh ) para pesquisar termos em arquivos PDF (antigos jornais OCR digitalizados) usando PDFGREP . Isso funciona muito bem. Ele solicita ao usuário o termo de pesquisa ( foo ) e o arquivo a pesquisar ( year.pdf ).

Eu quero capturar a saída para um log enquanto ainda estiver exibindo os resultados na tela. Eu usei com sucesso | tee log para fazer isso de três maneiras

  1. no prompt: fetch.sh | tee log

  2. no prompt: fetch.sh | tee log.foo

  3. dentro do script que eu posso fazer:

    (
       fetch.sh
    ) | tee log
    

O que eu realmente quero é fazer isso como parte de fetch.sh , mas estar no formato log.foo (formato de arquivo de 2. mas executado como 3).

Por dentro de fetch.sh , tentei:

  • ) | tee log.$foo ... produz o arquivo chamado log.

  • ) | tee log."$foo" ... produz o arquivo chamado log.

  • ) | tee log.'$foo' ... rende log.$foo (literal, sem substituição para $foo )

  • ) | tee log.${foo} ... produz o arquivo chamado log.

  • ) | tee log."${foo}" ... yields file named log. '

  • ) | tee log.'${foo}' ... rende log.${foo} (literal, sem substituição para $foo )

Em todos os casos, a saída é capturada corretamente, mas o nome do arquivo nunca é o que eu quero. O que estou fazendo errado?

    
por Doug W 14.09.2016 / 18:15

1 resposta

2

O problema que você está tendo é que, usando ( ... ) , você está executando todos os comandos em um sub-shell do processo atual. Como este subshell é um processo filho, nenhuma variável que você tenha atribuído será passada para o pai (seu script principal). Isso significa que a variável nunca alcança seu comando tee .

A solução é bastante simples, dentro do seu script você deve atribuir a variável antes de iniciar os colchetes, esta variável estará disponível para o comando tee .

Por exemplo, se a extensão de arquivo que você deseja adicionar for .txt :

foo=txt
(
commands from fetch.sh
) | tee log."$foo"

Note que usei aspas duplas, que o shell expandirá, para garantir que, no caso improvável de que sua extensão contenha espaços, ele ainda esteja intacto após a expansão.

Se você precisar definir foo dentro de fetch.sh, precisará usar outro método de agrupar os comandos do seu script.

    
por Arronical 15.09.2016 / 12:01