
Estoy trabajando con un script por lotes que usa WinSCP para transferir archivos desde una máquina UNIX a una máquina con Windows. Para lograr esto, WinSCP tiene que llamar scripts de shell en el lado UNIX.
Hay un script de shell que se detiene y no devuelve ningún valor hasta que caduca la sesión SFTP sin devolver la información esperada del script de shell. La línea WinSCP que ejecuta esta tarea es la siguiente
"C:\Program Files (x86)\WinSCP\WinSCP.com" /command "option batch abort" "option confirm off" "open sftp://user:[email protected]/data/line/script/" "call ./d_check_org1" "exit"
En este caso, esta línea tiene que activar el script de shell d_check_org1, que mostrará el resultado de sus líneas de eco.
d_check_org1 es así
#!/bin/bash
line=`more line_fullname`
seq=`more line_fullname | cut -c7-10`
if [ -d /gl/T60system/tripas/qcfiles/Line_QC/$seq ] && [ ! -z "/gl-off1/data/curro/Pi/$seq.$linefullname.*.*.pi" ]
then
Pi2name=`ls /gl-off1/data/curro/Pi2/"$seq".*| cut -c27-53`
piname=`ls /gl-off1/data/curro/Pi/"$seq".*| cut -c27-60`
echo
echo ===============================================
echo
echo DIRECTORY CHECK:
echo
echo For line $line
echo
echo $seq directory was found on qcfiles
echo "File" $Pi2name was found on Pi2 directory
echo "File" $piname was found on Pi directory
echo
echo ===============================================
else
echo
echo ===============================================
echo
echo DIRECTORY CHECK:
echo
echo For line $line
echo
echo $seq directory was NOT found on qcfiles, CHECK LINE NAME!
echo
echo ===============================================
fi
He reducido el problema a las primeras 2 líneas después de #!/bin/bash
Si asigno un valor a line y seq, entonces se ejecuta y muestra el contenido de las líneas de eco.
por ejemplo, si asigno valores como
line=2536140258
seq=0258
entonces este script se ejecutará completo
Pero en su forma original, donde el script tiene que asignar el nombre, se detendrá después de realizar la conexión hasta que se agote el tiempo de espera.
En el lado de UNIX, el script de shell funciona de cualquier manera.
Tenga en cuenta que dentro del bucle IF, hay 2 variables más a las que se les asignan otros valores, y estas 2 se ejecutan perfectamente, sin necesidad de un valor fijo.