Obter o número da linha em um shell script do Bourne

6

Gostaria de poder imprimir o número da linha atual em um script de shell. Eu sei sobre a variável $LINENO em shells Bash, mas não parece existir em shells Bourne. Existe alguma outra variável ou forma de obter o número da linha?

    
por MMM 28.09.2012 / 18:17

2 respostas

3

LINENO é um recurso do ksh, também presente no bash e no zsh. Não existe esse recurso no shell Bourne, na especificação POSIX ou no traço. Se você precisar do número da linha, certifique-se de que seu script seja executado sob um shell que tenha o recurso. A maioria dos sistemas tem o bash ou o ksh disponível.

if [ -z "$LINENO" ]; then
  if type ksh >/dev/null 2>/dev/null; then
    exec ksh "$0" "$@"
  elif type bash >/dev/null 2>/dev/null; then
    exec ksh "$0" "$@"
  else
     echo 1>&2 "$0: Fatal error: unable to find a shell that supports LINENO."
     exit 100
  fi
fi
    
por 29.09.2012 / 02:56
0

Você poderia pós-processar seu script

awk '{gsub(/[$]LINENO/,FNR);print}' script_template > script

Mas geralmente causa problemas ao ter que manter o modelo e gerar o script toda vez que você quiser fazer edições.

    
por 29.09.2012 / 04:00