bash получает статус выхода из ожидаемого скрипта - PullRequest
0 голосов
/ 05 июня 2018

Есть ли особый способ получения статуса выхода из /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 обменяла ключи, нужно несколько недельи клиент хочет там отчеты СЕЙЧАС).Есть ли особый способ получить статус выхода порожденной команды из ожидаемого сценария и экспортировать его в родительский сценарий 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 голосов
/ 05 июня 2018

Возможно:

#!/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. Ожидается построение на Tcl, который имеет очень богатую команду clock
  2. время ожидания по умолчанию составляет 10 секунд: я устанавливаю время ожидания равным бесконечности (-1), если передача файла занимает много времени
  3. Я явно жду окончания передачи (expect eof)
    • это может быть основной проблемой в вашем коде.
  4. , затем вы используете команду wait для получения статуса выхода.См. expect(1) справочную страницу
...