arquivo de string de eco não funciona

6

Eu escrevi o seguinte script:

for filename in 'find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX'
do
    echo "Output file is $OUTPUT_FILE"
    count='git log --pretty=format: --name-only $filename | grep -v ^$ | wc -l'
    echo "$count    $filename" >> $OUTPUT_FILE
done

Mas nada é gravado no arquivo de saída.

Por favor, note:

  1. Eu defini os valores para OUTPUT_FILE , IN_REGEX e OUT_REGEX .
  2. O código dentro do loop está sendo executado. Eu verifiquei isso com um sh -x invokation.
  3. Quando eu removo o >> $OUTPUT_FILE , obtenho a saída.
  4. Eu tentei um touch $OUTPUT_FILE dentro do script e está funcionando bem.

Alguém pode por favor apontar qual é o meu erro aqui?

    
por Karthick S 01.03.2013 / 13:14

2 respostas

3

Existe o $ OUTPUT_FILE? Quais são suas permissões ( ls -l $OUTPUT_FILE , getfacl $OUTPUT_FILE )? Quantas vezes é o echo "Output file..." executado? (Eu colocaria esse fora do for , mas é o seu chamado)?

(Estou suspeitando que seu find ... pipeline não retorna nada)

    
por 01.03.2013 / 13:44
0

Aqui estão algumas ideias que podem ajudar você a resolver isso:

  • Em vez de redirecionar o stanard para o arquivo, canalize-o para tee e inclua seu arquivo. Espero que você veja a saída no stdout (assim como ele vá para $ OUTPUT_FILE). Por exemplo:

    echo "$ count $ filename" | tee $ OUTPUT_FILE

  • Use um caminho absoluto para $ OUTPUT_FILE, não um caminho relativo para que não seja dependente de onde você invoca o script. Se você estiver usando parente, talvez não esteja procurando no lugar certo para o arquivo de saída.

  • Continue a chamar o script com -x para poder ver exatamente o que está acontecendo quando você o executa. Certifique-se de que o valor de $ OUTPUT_FILE esteja definido no momento do redirecionamento.

  • Se você não está comprometido com o sh, você pode tentar o seu script no bash. Você poderia então usar algumas das opções do bash usando o conjunto interno (veja help set ). Ao desenvolver um script, pode ser útil fazer um 'set -e' para que o script seja encerrado se algo retornar um status de saída diferente de zero. Você também pode precisar jogar com o status de pipefail. Então, para ajudar a depurar, você pode colocar isso no topo do seu script:

    set -x
    set -e
    # Optionally:
    set -o pipefail
    
por 01.03.2013 / 19:33