Использование сценария EXPECT с $ в пароле

922
Andy Kendall

Я пытаюсь установить переменную в скрипте bash для Linux, которая содержит $символ, то есть пароль - Gl @ d1us $ 123, так PASS="Gl@d1us\$123". Я могу предшествовать $с, \и он работает нормально, но когда он вызывает сценарий EXPECT, $символ вызывает его сбой. Я могу ввести пароль непосредственно в сценарий EXPECT, используя, \как и прежде, и он работает нормально, так что это просто процесс передачи переменной пароля между сценариями, что вызывает у меня горе.

Основной скрипт:

echo  echo  USER=kendalla  PASS="Gl@d1us\$123"  DIR=/home/kendalla/scripts/Audit   ./get_hardware.expect $HOST $USER $PASS > $DIR/$HOST 

Скрипт get_hardware.expect:

#!/usr/bin/expect -f log_user 1  log_file /home/kendalla/scripts/Audit/HOST  set HOST [lrange $argv 0 0]  set USER [lrange $argv 1 1]  set PASS [lrange $argv 2 2]  spawn ssh -q -l $USER $HOST  expect "$USER@rebehc01's password:"  send "Gl@d1us\$123\r" ;#(This works)  send $PASS ;#(This doesn't work)  

Вся помощь приветствуется.

Спасибо

Энди.

0
Покажите некоторый код. Это может быть легко решено. glenn jackman 10 лет назад 1
Код добавлен в соответствии с просьбой. Andy Kendall 10 лет назад 0

1 ответ на вопрос

0
glenn jackman

This is the problem:

./get_hardware.expect $HOST $USER $PASS > $DIR/$HOST . 

In shell scripting you always want to quote your variables, unless you understand precisely when to not quote them.

./get_hardware.expect "$HOST" "$USER" "$PASS" > "$DIR/$HOST" . 
Это все еще не работает. `./get_hardware.expect" $ HOST "" $ USER "" $ PASS ">" $ DIR / $ HOST "` и ожидать пароль "US US @ @ HOST:" отправить "$ PASS \ r" Ожидаем ">" Andy Kendall 10 лет назад 0
распечатайте значение $ PASS в ожидаемом скрипте. Что это там? glenn jackman 10 лет назад 0
Я изменил ожидаемый сценарий lrange на lindex, и он отлично работает, как я изначально написал. все равно спасибо за вашу помощь. Andy Kendall 9 лет назад 0