bash从expect脚本获取退出状态

时间:2018-06-05 19:13:35

标签: bash tcl wait expect

是否有一种特殊的方法来收集/home/casper/autoEXPscp.sh的退出状态。因为调试模式是说退出状态为零,但文件不是Ftp' d。

#!/bin/bash
set -x
blmnt="/home/casper/BlueMountain/"
ydate=$(date -d 'yesterday' "+%Y.%m.%d")
bfile="casper_BlueMountain_${ydate}.csv"

cd $blmnt

if [[ -e ${blmnt}${bfile} ]]; then
     /home/casper/autoEXPscp.sh
     result=$?
         if [ $result -eq 0 ]; then
             echo "Bluemountain scp is successful"
         else
             echo "Bluemountain scp failed"
         fi
else
   echo "${blmnt}${bfile} was not created "
   exit 1
fi
/home/casper/autoEXPscp.sh是一个期望脚本(是的,我知道 - 我需要交换钥匙 - 我在一家大公司工作,需要几周的时间让ssh小组交换密钥,客户想要那里现在报道)。是否有一种特殊方法可以从expect脚本中获取生成的命令退出状态,并将其导出到父bash脚本。

#!/usr/bin/expect
    set ydate [exec date -d "yesterday" "+%Y.%m.%d"]
    set file "casper_BlueMountain_${ydate}.csv"
    spawn scp -o StrictHostKeyChecking=no -oport=56050 $file casper@casper.com:/bluemountain/outgoing
    set pass "foo"
    expect {
    password: {send "$pass\r"; exp_continue}
              }

1 个答案:

答案 0 :(得分:0)

也许:

#!/usr/bin/expect
set ydate [clock format [clock add [clock seconds] -1 day] "%Y.%m.%d"]
set file "casper_BlueMountain_${ydate}.csv"
set timeout -1
spawn scp -o StrictHostKeyChecking=no -oport=56050 $file casper@casper.com:/bluemountain/outgoing
set pass "foo"
expect {password:}
send "$pass\r"
expect eof
lassign [wait] pid spawnid flag status
exit $status

注释:

  1. expect建立在具有非常丰富的clock command
  2. 的Tcl上
  3. 默认超时为10秒:如果文件传输需要很长时间,我将超时设置为无限(-1)
  4. 我明确等待转移结束(expect eof
    • 这可能是您代码中的主要问题。
  5. 然后使用wait命令获取退出状态。请参阅expect(1) man page