Espaço em branco inesperado usando sqsh em substituição de comando [closed]

0

Abaixo, as instruções do script de shell se comportam de maneira estranha

ARG_DATE='sqsh -S $SERVER -U $DB_USER -P $DB_PASSWORD -D dbname -h<<END
SET NOCOUNT ON
go
select convert(varchar, PRIOR_COB_DATE, 112) from TABLE
go
END'
echo $ARG_DATE

if [ "${ARG_DATE}" != "1" ] && [ "${ARG_DATE}" != " " ]; then
    if [ ${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1} = "1" ]; then
        PRIOR_POSITION_DATE=${ARG_DATE}
        echo "assigned " $PRIOR_POSITION_DATE
    else
        echo "Date must be in follow format: YYYYMMDD"
        echo "POSITION_DATE will be used."
    fi
fi



URL_PARAMS="HttpAutosysJobExecutor/NotificationEmailGenerator.job?prior_cob_date=${PRIOR_POSITION_DATE}"
    echo $URL_PARAMS
    echo ${CONNECTION_STATUS_FILE} "http://${SERVER_ADDRESS}:${SERVER_PORT}/HTTP/${URL_PARAMS}"
        wget -o ${CONNECTION_STATUS_FILE} "http://${SERVER_ADDRESS}:${SERVER_PORT}/HTTP/${URL_PARAMS}"
        if [ -f ${CONNECTION_STATUS_FILE} ]; then
            RESPONSE_STATUS='grep -o '200 OK' ${CONNECTION_STATUS_FILE}'
            if [ -z "${RESPONSE_STATUS}" ]; then
                echo Login failed.
                exit 3
            fi
        #    rm ${CONNECTION_STATUS_FILE}
        fi

durante a execução do wget estou obtendo tantos espaços em branco porque o procedimento de banco de dados de espaços brancos não está convertendo a cadeia na Data do banco de dados, usando sed Posso remover espaços em branco, mas quero saber o possível motivo disso.

Faça login em CONNECTION_STATUS_FILE

http://XXXXX:7001/MYAPP/HttpAutosysJobExecutor/NotificationEmailGenerator.job?prior_cob_date=%2020130523%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
    
por Alpesh Gediya 29.05.2013 / 08:15

1 resposta

1

O echo não mostra o espaço em branco no final. Para isso você precisa de algo como echo "${URL_PARAMS}x" . Você pode fazer set -x imediatamente antes da chamada wget e set +x imediatamente depois para ver como wget é chamado.

O problema é a divisão de palavras do shell:

${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1} = "1"

em vez de

"${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1}" = "1"

Uma solução seria colocar isso antes dessa linha (fixa):

ARG_DATE="${ARG_DATE// /}"
    
por 29.05.2013 / 11:25