
私は、WinSCP を使用して UNIX マシンから Windows マシンにファイルを転送するバッチ スクリプトを使用しています。これを実現するには、WinSCP が UNIX 側でシェル スクリプトを呼び出す必要があります。
シェル スクリプトから期待される情報を返さずに SFTP セッションが期限切れになるまで停止し、値を返さないシェル スクリプトが 1 つあります。このタスクを実行する 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 をトリガーする必要があり、その echo 行の結果が表示されます。
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の後の最初の2行に絞り込まれました。
行とシーケンスに値を割り当てると、実行されてエコー行の内容が表示されます。
例えば、次のような値を割り当てると
line=2536140258
seq=0258
このスクリプトは完全に実行されます
しかし、スクリプトが名前を割り当てる必要がある元の形式では、接続が確立された後、タイムアウトするまで停止します。
UNIX 側では、シェル スクリプトはどちらの方法でも動作します。
IF ループ内には、他の値が割り当てられている変数がさらに 2 つあり、これら 2 つは固定値なしでも正常に実行されることに注意してください。