期待bash中的程序

时间:2016-10-31 18:46:58

标签: bash shell expect

我正在使用下面的脚本通过使用expect函数随机更改用户名,但它给了我一个错误命令,即使我已经安装了expect命令也找不到。并使用perl脚本替换用户名。

#!/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
    '

2 个答案:

答案 0 :(得分:2)

在脚本的第一行,您声明/usr/bin/expect -f将用作命令解释器:

#!/usr/bin/expect -f

但是你使用bash执行你的脚本:

bash ran.sh

你应该使你的脚本可执行并只是调用它:

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

当然,bash对put expect命令一无所知,所以它抱怨没有找到spawn。

BTW,期望使用Tcl作为其脚本语言,因此在expect脚本中使用shell命令将不起作用。

答案 1 :(得分:0)

您正在错误地运行脚本。

这是一个expect脚本,您已经设置了shebang #!行。因此,运行此脚本的正确方法是./ran.sh,假设您已将其设置为可执行文件。

当您将脚本作为bash ran.sh运行时,将忽略shebang行,并将脚本作为bash脚本运行。 spawn是expect命令,而不是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

我没有对此进行测试,因此可能会出现一些错误,但希望能让您继续。