Meu script bash não encontra um arquivo existente

0

Eu percebi um script bash que funciona em um arquivo de texto existente, localizado no mesmo diretório de trabalho do script. O script pega o nome do arquivo para calcular através de um parâmetro de função.

O problema é que, quando executo o script, ele não localiza o arquivo. Eu já verifiquei o parâmetro posicional da função quando chamado e o nome do arquivo está correto. Mas uma verificação no nome do arquivo "[-e filename]" ou um comando iniciado nele (ex. Cat filename) retorna um erro. Nome de arquivo não encontrado.

Eu colo meu script ..

#!/bin/bash

query=
loan=

function count(){
  local valore=0
  local wordcmp
  TMPFILE=$(mktemp)

  if [ -n "$query" ]; then
    wordcmp=$query
  else wordcmp=$loan
  fi

  echo $1 (here print the correct file name passed by the caller)
  for FILE; do
    if [ -e $FILE ]; then
      cat $FILE | grep $wordcmp > $TMPFILE
      exec 3< $TMPFILE
  while read -u 3 line; do
    valore=$(($valore + ${line#$wordcmp}))
  done
      exec 3>&-
      echo "$wordcmp $valore"
      echo "Bye."
    else
      echo "$0: error --- log file $FILE not found" 1>&2
   fi
   valore=0
  done
}

set -- 'getopt -o "h" -l "query,loan" -- "$@"'

while true; do

   case "$1" in

         --query) query=QUERY
              shift;;

         --loan) loan=LOAN
             shift;;

         -h) echo "$0: help" 1>&2
         echo "usage: $0 --query logfile for query summary" 1>&2
             echo "usage: $0 --loan logfile for loan summary" 1>&2
             echo "usage: $0 -h for this help message" 1>&2
         exit 1;;
         --) shift
break;;
 esac
done

if [ -z "$query" -a -z "$loan" ]; then
  echo "$0: you must specify at least one option and log file(s)" 1>&2
  echo "please type $0 -h for help" 1>&2
  exit 1
fi

if [ $# = 0 ]; then
  echo "$0: you must specify at least one log file" 1>&2
  echo "please type $0 -h for help" 1>&2
  exit 1
  shift
fi
 count $@

A saída ao invocar myscript --query filename.log é

"./ myscript.sh: erro --- arquivo de log 'filename.log' não encontrado"

(mas o arquivo "filename.log" existe no diretório local quando o script é iniciado)

Alguma ideia?

Obrigado a todos

    
por Graziano 01.10.2012 / 20:12

1 resposta

3

O erro que você diz que dá ("./myscript.sh: error --- arquivo de log 'filename.log' not found") possui aspas simples ao redor do nome do arquivo, mas o comando que o imprime ( echo "$0: error --- log file $FILE not found" 1>&2 ) não os colocou lá. Isso sugere que eles são parte do valor de $ FILE, o que significa que eles estão procurando por eles como parte do nome do arquivo.

Se eu estou certo sobre isso, não é um problema no script, mas em como você está chamando. Então, como você está chamando esse script? Se é algo assim:

cmd="./myscript.sh --loan 'filename.log'"
$cmd

... então esse é o problema, porque citar no bash não funciona dessa maneira; veja BashFAQ # 050: Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham .

    
por 02.10.2012 / 02:31