我正在使用批处理脚本,该脚本使用 WinSCP 将文件从 UNIX 计算机传输到 Windows 计算机。为此,WinSCP 必须在 UNIX 端调用 shell 脚本。
有一个 shell 脚本会停止运行,并且不会返回任何值,直到 SFTP 会话到期,而不会从 shell 脚本返回预期的信息。执行此任务的 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"
在这种情况下,此行必须触发 shell 脚本 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 方面,shell 脚本可以以任何方式工作。
请注意,在 IF 循环内部,还有 2 个变量被分配了其他值,并且这 2 个变量运行完美,不需要固定值。