Bash: сценарий Expect не хранит значение кода выхода - PullRequest
0 голосов
/ 09 ноября 2018

Я использую скрипт bash Ожидается и хочу записать код завершения для команды diff в конце в переменной. Однако это не признает это. Как мне сделать эту запись и сохранить значение?

/usr/bin/expect << 'EOF'
set timeout -1
spawn ssh root@server
send "wget -r  --spider --user user--password password server/php/site_index.php -P /data/tmp/wget_result_after \r"
expect { 
            "Downloaded" 
       }
send "set exitCodeDb 1 \r"
expect { 
            "*]# " 
       }
send "diff --brief /data/tmp/db1 /data/tmp/db2 && exitCodeDb=0 || exitCodeDb=1 \r"
expect { 
            "*]# " 
       }  
send "echo \"Exit code for DB diff is $exitCodeDb\" \r"  
 expect { 
            "*]# " 
       }

EOF

Я получаю ошибку

 can't read "exitCodeDb": no such variable

1 Ответ

0 голосов
/ 09 ноября 2018

Проблема в том, что переменная $exitCodeDb интерпретируется как expect.

Вы действительно хотите передать строку с переменной bash, но для expect это только строка.

Чтобы пройти знак доллара, вы можете использовать знак {...}:

set str {echo -e "Exit code for DB diff is $exitCodeDb"}
send "$str\r"
...