2014-10-07 3 views
0

Я пытаюсь передать пароль динамически при запуске сценария ожидания.Как передать аргумент в сценарии оболочки оболочки во время выполнения

Script выглядит примерно так:

#!/usr/bin/Expect 

set server [lindex $argv 0] 

send "enter you password" 

read Password; 

send $password\n; 

spawn ssh [email protected]$server ... 

Застрял при получении пароля от терминала во время выполнения сценария.

ответ

1

Команда [read] читает до конца файла, так что она ждет вас, чтобы закрыть терминал. Используйте команду [gets] вместо:

set password [gets stdin] 

Кроме того, вы используете [read] неправильно. Первый аргумент - это идентификатор канала для чтения. Обратитесь к документации для получения дополнительной информации:

http://www.tcl.tk/man/tcl8.6/TclCmd/read.htm

http://www.tcl.tk/man/tcl8.6/TclCmd/gets.htm

+0

Спасибо дружище это работает хорошо. –

1

В коде, вы использовали следующий код как puts заявление

send "enter your password" 

, который не является надлежащим образом. Обычно команда send пытается отправить команды на консоль, и если какой-либо процесс будет создан с помощью скрипта, тогда эта команда будет отправлена ​​на этот процесс.

В любом случае, вы получите инструкции, распечатанные в консоли. Но, помните об этом. Вместо этого лучше использовать команду send_user.

Вы можете попробовать это

#!/usr/bin/expect 

set server [lindex $argv 0] 

stty -echo; #Disable echo. To avoid the password to get printed in the terminal 

send_user "enter you password : " 

# Using regex to grab all the input till user press 'Enter' 
# Each submatch will be saved in the the expect_out buffer with the index of 'n,string' 
# for the 'n'th submatch string 

# expect_out(0,string) will have the whole expect match string including the newline 

# The first submatch is nothing but the whole text without newline 
# which is saved in the variable 'expect_out(1,string) 
expect_user -re "(.*)\n" ;  

stty echo; #Enable echo 

set pwd $expect_out(1,string) 

send $pwd\n; 

expect "some-other-statment" 

#Your further code here 

Вы можете удалить stty -echo и stty echo, если вы не беспокоиться о пароле получение печататься в консоли

Ссылка: http://www.tcl.tk/man/expect5.31/expect.1.html

+0

Привет, Динеш, я собирался получить информацию динамически от пользователя. Ваш код работает отлично и безопаснее. Но будет относиться к другому как правильно, так как он точно соответствует моему состоянию. Спасибо за помощь ... :) –

+0

@vijayjoshi, обновил мой ответ – Dinesh

+0

Спасибо Dinesh за ваш ответ. Это мне очень помогло –

Смежные вопросы