
Ich arbeite mit einem Batch-Skript, das WinSCP verwendet, um Dateien von einem UNIX-Rechner auf einen Windows-Rechner zu übertragen. Dazu muss WinSCP Shell-Skripte auf der UNIX-Seite aufrufen.
Es gibt ein Shell-Skript, das angehalten wird und keinen Wert zurückgibt, bis die SFTP-Sitzung abläuft, ohne die erwarteten Informationen vom Shell-Skript zurückzugeben. Die WinSCP-Zeile, die diese Aufgabe ausführt, lautet wie folgt
"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"
In diesem Fall muss diese Zeile das Shell-Skript d_check_org1 auslösen, das das Ergebnis seiner Echozeilen anzeigt.
d_check_org1 ist so
#!/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
Ich habe das Problem auf die ersten beiden Zeilen nach #!/bin/bash eingegrenzt
Wenn ich Zeile und Sequenz einen Wert zuweise, dann läuft es und zeigt den Inhalt der Echozeilen an
Wenn ich beispielsweise Werte zuweise wie
line=2536140258
seq=0258
dann wird dieses Skript vollständig ausgeführt
In der ursprünglichen Form, in der das Skript den Namen zuweisen muss, wird es jedoch nach dem Herstellen der Verbindung bis zum Timeout angehalten.
Auf der UNIX-Seite funktioniert das Shell-Skript in beiden Fällen.
Beachten Sie, dass es innerhalb der IF-Schleife zwei weitere Variablen gibt, denen andere Werte zugewiesen sind, und dass diese beiden perfekt ausgeführt werden, ohne dass ein fester Wert erforderlich ist.