2016-10-14 7 views
0

Ниже мой сценарий:чтение переменной от пользователя в ожидать сценарий

#!/usr/bin/expect 
echo "enter unique id" 
read test 
mkdir -p /evoting_test/$test 
     spawn scp -r [email protected]:/shareddata/was/l1/*.pdf /rishabh/$test/ 
     set pass "abc123" 
     expect { 
       password: {send "$pass\r"; exp_continue} 
       } 

Я получаю сообщение об ошибке:

invalid command name "echo" 
    while executing 
"echo "enter uNIQUE id" " 
    (file "./scp_test.sh" line 2) 

Он не читает переменную от пользователя и использовать эту переменную в команде

+0

Пожалуйста, в будущем, проверьте предварительный просмотр, чтобы сделать ваше форматирование правильно, прежде чем отправить свой вопрос. –

+3

Что касается вашего вопроса: 'echo' и' read', как 'mkdir', недействительны команды ожидания. ожидать не bash; вы не можете использовать «#!/usr/bin/expect» shebang, а затем написать код, который не находится в языке ожидания (сам по себе это надмножество TCL) внутри него. –

+0

... и поскольку проблема возникает до того, как вы дойдете до команды scp, нет никакой причины, по которой scp будет частью заголовка (или части вопроса, если на то пошло): такая же проблема произойдет и без нее. –

ответ

0

"ожидать" способ сделать это:

send_user "enter unique id: " 
expect_user -re "(.*)\n" 
set test $expect_out(1,string) 
send_user "you said $test\n" 

Поскольку ожидать распространяется , вы можете использовать:

puts -nonewline "enter unique id: " 
flush stdout 
gets stdin test 
puts "you said $test" 

Кроме того, вы получите сообщение об ошибке для mkdir - это внешняя команда. Вы можете сделать один из:

exec mkdir -p /evoting_test/$test # invoke the external command 
file mkdir /evoting_test/$test  # use the builtin 

См http://tcl.tk/man/tcl8.6/TclCmd/file.htm

+0

Это работает Спасибо за помощь – Rishabh

0

IMHO лучшим способом решить эту проблему было бы разделение двух файлов, каждый из которых использует другой интерпретатор в соответствии с его требованием.

  1. Первый файл: будет содержать код Scp все файлы в формате PDF в нужное место, и вы можете прочитать места назначения в этом сценарии, а также.

  2. Используйте этот файл для запуска и выполните свою работу.