o script bash falha em ser executado no ksh

0

Eu tenho abaixo o script que é executado com sucesso se eu usar #!/usr/bin/env bash .

O mesmo script está recebendo EOF inesperado ao procurar o erro " correspondente ao usar #!/bin/ksh .

Por que isso?

#!/usr/bin/env bash
#--------------------
# Command variables
#--------------------
ECHO=/usr/bin/echo
SED=/usr/bin/sed
EXPR=/usr/bin/expr
EGREP=/usr/bin/egrep
DATE=/usr/bin/date
CUT=/usr/bin/cut

#--------------------
# Local variables
#--------------------
shopt -s extglob
SHELLNAME=$(basename $0)
GRANT_RAW_AMT=''
GRANT_AMT=0
GRANT_FILE=''
FILE_BN=''
COMPANY=''
EMAIL_GRANT=''
EMAIL_RECIPIENTS=$(${ATAS_SHELL}/get_global_constant.sh RESP RESP_CASH_RECIEPT)
EMAIL_RETURN=$(${ATAS_SHELL}/get_global_constant.sh RESP CASH_RECEIPT_SENDER)
RESP_DIR=${ATAS_RESP}/$(${ATAS_SHELL}/get_global_constant.sh RESP RESPDIR)
RESP_LOG=${ATAS_RESP}/log/${0##*/}.$(/usr/bin/date +%y%m%d).$(/usr/bin/date +%H%M).log

#--------------------------------------------
#  Determine the amount of grant for the company
#--------------------------------------------
  GRANT_RAW_AMT=000078753603
  unpadded_amt=${GRANT_RAW_AMT##+(0)} # trim leading 0's -- otherwise a value that starts with
                              # 0s can be treated as octal rather than decimal.
  printf -v GRANT_AMT '%d.%02d' "$(( unpadded_amt / 100 ))" "$(( unpadded_amt % 100 ))"
  EMAIL_GRANT=${EMAIL_GRANT}${COMPANY}'\t$'${GRANT_AMT}'\n'
${ECHO} ${EMAIL_BODY1}${EMAIL_GRANT}
#--------------------------------------------
#  End of Program
#--------------------------------------------
echo >> ${RESP_LOG}
${ECHO} "${SHELLNAME} completed"
exit 0
    
por Priya 08.03.2018 / 15:23

1 resposta

4

shopt -s extglob é específico do bash ( shopt sozinho é específico do bash, bash é o único shell que possui dois conjuntos de opções)

A opção extglob em bash ativa o suporte para os globs estendidos do ksh. Não é necessário em ksh, mas note que em ksh esses globs não são reconhecidos quando usados em variáveis.

printf -v é uma extensão bash . Não é suportado e não é necessário em ksh93 porque lá, a substituição de comando não bifurca um subshell. Então, ao invés de:

printf -v var ...

use

var=$(printf ...)

ou em ksh93:

var=${ printf ...;}

se argumentos para printf devem fazer alterações no ambiente (como em ${foo=bar} ou $((n++)) ) . (embora note que ele remove caracteres de nova linha).

Observe também que o ksh93 suporta aritmética de ponto flutuante, ao contrário de bash , então você não precisa recorrer a esse tipo de hack.

Além disso, não consigo ver nada que explique a mensagem de erro que você está recebendo.

    
por 08.03.2018 / 16:22