Как отловить стандартные ошибки из ожидаемого скрипта

следующий сценарий ожидания удалит файл /var/tmp/file на удаленной машине

но перед этим сценарий ожидания выполняет ssh на удаленной машине,

Я поставил 2>/tmp/errors, чтобы поймать ошибку от ssh

но я замечаю, что, несмотря на ошибку ssh для удаленной отправки, я не вижу ошибок из файла /tmp/errors

но когда я попробовал вручную

ssh   $LOGIN@$machine

затем ssh терпит неудачу на WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

но из ожидания я не могу поймать эти ошибки в /tmp/erros

посоветуйте что не так? почему 2>/tmp/errors не фиксирует ошибки?

 expect_test=`cat << EOF
 set timeout 50
 spawn  ssh   $LOGIN@$machine  2>/tmp/errors
       expect {
                 ")?"   { send "yes\r"  ; exp_continue  }

                 word:  { sleep 1 ; send $PASSORD\r}
              }
 expect >  {send "sleep 1\r"}
 expect >  {send "rm -f /var/tmp/file\r"}
 expect >    {send exit\r}
 expect eof
 EOF` 


 expect -c  "$expect_remove_file"

person maihabunash    schedule 04.11.2014    source источник
comment
привет Итан как дела - спасибо за обновление   -  person maihabunash    schedule 04.11.2014
comment
Я не знаю, навскидку, можно ли использовать перенаправления в spawn командах вот так. Если вы можете, вам, вероятно, по крайней мере, нужно процитировать это для tcl. При этом, если expect не читает стандартную ошибку (и я не припоминаю навскидку, если это так), вы, вероятно, можете прикрепить это к выполнению expect -c напрямую, чтобы получить то, что вы хотите.   -  person Etan Reisner    schedule 04.11.2014
comment
продублировано для суперпользователя: superuser.com/q/835794/4714   -  person glenn jackman    schedule 04.11.2014


Ответы (1)


spawn не понимает перенаправление ввода/вывода. Заменять

spawn  ssh   $LOGIN@$machine  2>/tmp/errors

либо с

spawn  ssh   $LOGIN@$machine -E /tmp/errors
# -E log_file tells ssh where to write the error log instead of stderr

or

spawn  sh -c "ssh $LOGIN@$machine 2>/tmp/errors"
person nwk    schedule 04.11.2014