我有一个expect脚本,可以将文件从一个服务器传输到另一个服务器。这个期望脚本正在由shell脚本启动。如果文件在源中可用,则expect脚本可以传输该文件,并且它将提供零退出代码。但是,当文件在源中不可用时,脚本将不会传输文件,但它仍将提供零退出代码。
如何捕获expect脚本的正确退出代码。
test.sh:
VirtualHost
test.exp来:
SELECT t1.TITLE,
t1.DIRECTOR,
COALESCE(t2.VIDEOSNUMBER, 0) AS VIDEOSNUMBER
FROM Movie t1
LEFT JOIN
(
SELECT v.TITLE, COUNT(DISTINCT r.COLLOC) AS VIDEOSNUMBER
FROM Rent r
INNER JOIN Video v
ON r.COLLOC = v.COLLOC
GROUP BY v.TITLE
) t2
ON t1.TITLE = t2.TITLE
ORDER BY COALESCE(t2.VIDEOSNUMBER, 0) DESC
示例在源中没有可用文件时输出:
#!/bin/sh
DT=`date +%Y%m%d`
RXHOME=/tmp'
x_server=A1234
x_file="test_${DT}.dat"
cd $RXHOME/scripts
./test.exp ${x_server} ${x_file}
if [ $? -ne 0 ]
then
echo "ERROR : Expect script encountered an error."
exit 1
fi
正如您所看到的,即使没有文件传输到目标,因为它在源代码中不可用,脚本仍然会退出,退出代码为零。
答案 0 :(得分:0)
您必须自己处理错误。试试这样:
set err 0
send -- "put ${srcDir}/${XFILE} ${trgDir}/test_file.txt\r"
expect {
-re "File .* not found" {
set err 1
exp_continue
}
"sftp> "
}
send -- "bye\r"
expect eof
exit $err
答案 1 :(得分:0)
为什么不在生成sftp之前检查文件是否存在?
set srcFile [file join $srcDir $XFILE]
if {! [file exists $srcFile]} {
puts stderr "File not found in source: $XFILE"
exit 1
}
spawn /usr/ldir/bin/sftp ${uid}@${XSERVER}
...