es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Devolver un nombre de archivo desde una función de ksh produce un error de ‘número incorrecto’.

Tengo un script de shell con una función y cuando llamo a la función, obtengo un error de número incorrecto. En mi función, obtengo un nombre de archivo de la base de datos y lo devuelvo. El retorno da el error de ‘número incorrecto’. Detalles a continuación:

llamada a GET_ARCHIVO_MIO():
  GET_ARCHIVO_MIO $jobid
-- $jobid tiene el número correcto
GET_ARCHIVO_MIO()
{
        echo "el parámetro de entrada del id de trabajo es: " $1
        curfile=`sqlplus -s /@nombredeusuario<< EOF
        set feed off heading off verify off serveroutput off

        select mi_nombre_de_archivo
        from mi_nombre_de_tabla
        where jobid=$1;
        exit;
EOF`
        echo "curfile es: " $curfile
        return $curfile
}

-- echo "curfile es: " $curfile - muestra el nombre de archivo correcto
-- return $curfile da un error de número incorrecto.
Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema está en la declaración return $curfile de tu función GET_MYFILE(). En el script de shell, la instrucción return sólo puede devolver un valor entero, no una cadena o un nombre de archivo. Por lo tanto, cuando intentas devolver el nombre de archivo almacenado en la variable $curfile, obtienes un error de “número incorrecto”.

    Para solucionar este problema, puedes utilizar el comando echo para mostrar el nombre de archivo y luego capturarlo cuando llames a la función. El código actualizado debería verse así:

    llamada a GET_MYFILE() :
      curfile=$(GET_MYFILE "$jobid")
    --$job id contiene el número correcto
    
    GET_MYFILE()
    {
            echo "el parámetro de entrada del id de trabajo es: $1"
            curfile=$(sqlplus -s /@username<<eof
            set feed off heading off verify off serveroutput off
    
            select my_file_name
            from my_table_name
            where jobid=$1;
            exit;
    eof
    )
            echo "curfile es: $curfile"
            echo "$curfile" # mostrar el nombre de archivo en lugar de devolverlo
    }
    
    -- curfile=$(get_myfile "$jobid") captura el nombre de archivo
    

    aquí, se usa $() en lugar de las comillas invertidas para capturar la salida de la función. el comando echo se utiliza para mostrar el nombre de archivo en la función, y luego se captura la salida utilizando $(). de esta manera, puedes recuperar el nombre de archivo sin obtener el error de “número incorrecto”.

    ¡espero que esto ayude! set=”” feed=”” off=”” heading=”” off=”” verify=”” off=”” serveroutput=”” off=”” select=”” my_file_name=”” from=”” my_table_name=”” where=”” jobid=”$1;” exit;=”” eof=”” )=”” echo=”” “curfile=”” es:=”” $curfile”=”” echo=”” “$curfile”=”” #=”” mostrar=”” el=”” nombre=”” de=”” archivo=”” en=”” lugar=”” de=”” devolverlo=”” }=”” –=”” curfile=”$(GET_MYFILE” “$jobid”)=”” captura=”” el=”” nombre=”” de=”” archivo=”” “`=”” aquí,=”” se=”” usa=”” $()=”” en=”” lugar=”” de=”” las=”” comillas=”” invertidas=”” para=”” capturar=”” la=”” salida=”” de=”” la=”” función.=”” el=”” comando=”” echo=”” se=”” utiliza=”” para=”” mostrar=”” el=”” nombre=”” de=”” archivo=”” en=”” la=”” función,=”” y=”” luego=”” se=”” captura=”” la=”” salida=”” utilizando=”” $().=”” de=”” esta=”” manera,=”” puedes=”” recuperar=”” el=”” nombre=”” de=”” archivo=”” sin=”” obtener=”” el=”” error=”” de=”” “número=”” incorrecto”.=”” ¡espero=”” que=”” esto=””></eof
    set feed off heading off verify off serveroutput off

        select my_file_name
        from my_table_name
        where jobid=$1;
        exit;
    

    eof
    )
    echo “curfile es: $curfile”
    echo “$curfile” # mostrar el nombre de archivo en lugar de devolverlo
    }

    — curfile=$(get_myfile “$jobid”) captura el nombre de archivo
    “`

    aquí, se usa $() en lugar de las comillas invertidas para capturar la salida de la función. el comando echo se utiliza para mostrar el nombre de archivo en la función, y luego se captura la salida utilizando $(). de esta manera, puedes recuperar el nombre de archivo sin obtener el error de “número incorrecto”.

    ¡espero que esto ayude!>

Comments are closed.