
Я работаю с пакетным скриптом, который использует WinSCP для передачи файлов с машины UNIX на машину Windows. Чтобы добиться этого, WinSCP должен вызывать скрипты оболочки на стороне UNIX.
Есть один скрипт оболочки, который останавливается и не возвращает никакого значения, пока не истечет сеанс SFTP, не возвращая ожидаемую информацию из скрипта оболочки. Строка WinSCP, которая выполняет эту задачу, выглядит следующим образом
"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"
В этом случае эта строка должна запустить скрипт оболочки d_check_org1, который покажет результат своих эхо-строк.
d_check_org1 выглядит так
#!/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
Я сузил проблему до первых двух строк после #!/bin/bash
Если я присваиваю значение line и seq, то он запускается и показывает содержимое строк echo.
например, если я присваиваю такие значения, как
line=2536140258
seq=0258
то этот скрипт выполнит полную
Но в исходном виде, где скрипт должен назначить имя, он остановится после установления соединения до истечения времени ожидания.
На стороне UNIX скрипт оболочки работает в любом случае.
Обратите внимание, что внутри цикла IF есть еще 2 переменные, которым присвоены другие значения, и эти 2 работают отлично, нет необходимости в фиксированном значении.