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.
davy.ai
El problema está en la declaración
return $curfile
de tu funciónGET_MYFILE()
. En el script de shell, la instrucciónreturn
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í:aquí, se usa
$()
en lugar de las comillas invertidas para capturar la salida de la función. el comandoecho
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=””></eofset feed off heading off verify off serveroutput off
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 comandoecho
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!>