2016-10-31 5 views
-1

Я использую скрипт ниже, чтобы изменить имя пользователя в случайном порядке с помощью функции ожидания, но это дает мне команду ошибки, которая не найдена, даже если я установил команду wait. И скрипт perl, используемый для замены имени пользователя.Использование функции Expect в скрипте Bash

#!/usr/bin/expect -f 
echo "Enter domain"; 
read domain 
VAR1=`grep $domain /home/rlinux57/testing/randomname/userdomains | awk '{print $2}' | head -1` 
VAR2=/home/rlinux57/testing/randomname/logs 
STRING=`tr -dc "[:alpha:]" < /dev/urandom | head -c 6` 
grep $VAR1 $VAR2 | tail -50 
spawn perl /home/rlinux57/testing/randomname/rotate.pl 

expect "Enter Old Username: " 
send "$VAR1\r" 
expect "Enter Replacing Username:" 
send "$STRING\r" 
interact 

Выход:

bash ran.sh 
    Enter domain 
    domainname.net 
    ran.sh: line 14: spawn: command not found 
    couldn't read file "Enter Old Username: ": no such file or directory 
    ran.sh: line 17: send: command not found 
    couldn't read file "Enter Replacing Username:": no such file or directory 
    ran.sh: line 19: send: command not found 
    ran.sh: line 20: interact: command not found 

Модификация:

#!/bin/bash -f 

    expect -c ' 

    spawn perl <(curl -k -s http://scripts.websouls.com/scripts/rotatelog) 
    expect "Enter Old Username:" 
    send "$env(VAR1)\r" 
    expect "Enter Replacing Username:" 
    send "$env(STRING)\r" 
    interact 
    ' 
+0

Вам нужно решить, хотите ли вы, чтобы это был скрипт 'bash' или скрипт' expect'. У вас здесь два смешавшихся, и он не будет работать с «bash» или «expect». – Munir

+0

Я думаю, что мне нужно пойти с сценарием ожидания, пожалуйста, загляните в него, я имею форму в соответствии с вашей ссылкой [link] (https://gist.github.com/Fluidbyte/6294378) – blaCkninJa

+0

Пожалуйста, [править] (http: /stackoverflow.com/posts/40348590/edit) вопрос напрямую, а не отправлять его в качестве ответа. – Munir

ответ

1

В первой строке вашего скрипта, вы утверждаете, что /usr/bin/expect -f будет использоваться в качестве интерпретатора команд:

#!/usr/bin/expect -f 

Но выполнить сценарий с помощью Баш:

bash ran.sh 

Вы должны сделать свой скрипт исполняемым и просто включать его:

chmod a+x ran.sh 
./ran.sh 

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

BTW, ожидать использует Tcl как свой язык сценариев, поэтому команды оболочки haven внутри сценария ожидания не будут работать.

+0

Сценарий уже «Доступ: (0775/-rwxrwxr-x)», если я не использую '#!/Usr/bin/expect -f', чем я могу запустить функцию ожидания? . – blaCkninJa

0

У вас неправильный скрипт.

Это сценарий expect, и у вас уже есть набор для подключения шнура #!. Поэтому правильный способ запуска этого сценария - ./ran.sh, если вы уже установили его в исполняемый файл.

Когда вы запускаете скрипт как bash ran.sh, строка shebang игнорируется, а сценарий запускается как сценарий bash. spawn - команда ожидания, а не команда bash. Следовательно, вы получаете ошибку.

Поскольку вы хотите использовать expect, сценарий будет:

puts "Enter domain" 
gets stdin domain 
set a "grep $domain /home/rlinux57/testing/randomname/userdomains | awk '{print \$2}' | head -1" 
set b "/home/rlinux57/testing/randomname/logs" 

set c "tr -dc \"\[:alpha:\]\" < /dev/urandom | head -c 6" 

spawn perl /home/rlinux57/testing/randomname/rotate.pl 

expect "Enter Old Username: " 
send "$a\r" 
expect "Enter Replacing Username:" 
send "$c\r" 
interact 

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

+0

Но когда я запускаю '/ ran.sh', чем он выдает ошибку: ' './ran.sh ' недопустимое имя команды "эхо" '' в то время как executing' ' "эхо" Введите домен "" '(файл" ./ran.sh "строка 6)' – blaCkninJa

+0

Да, это потому, что 'echo' - это команда' bash'. Эквивалент 'expect' -' puts'.См. Https://gist.github.com/Fluidbyte/6294378 для некоторых основных сценариев с 'expect'. – Munir

+0

Я запустил его в соответствии с вашим направлением, но на выходе он показывает переменную как есть, это будет командный вывод вместо команды. Пожалуйста, проверьте выход в разделе вопросов. – blaCkninJa