我正在使用下面的脚本通过使用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
'
答案 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
我没有对此进行测试,因此可能会出现一些错误,但希望能让您继续。