我想在重新启动数十台UBUNTU服务器(12.04& 14.04)后使用EXPECT脚本来装载卷。
我无法弄清楚如何设置主机名变量(例如从/ etc / hostname中获取记录) - >我不想为每个服务器创建一个脚本(设置特定主机名)。我的想法是将这个脚本全局用于我的环境。
以下脚本运行正常 - 但是有set fix hostname
#!/usr/bin/expect -f
set timeout 90
set sudo_pass "Password01
set mount_pass "Password02"
set hostname "test-staging" <<<==== here I set static hostname
# turns off the output to STDOUT
log_user 0
# run mount-script
spawn sudo mount-script
# type sudo pass
expect "password for"
send "$sudo_pass\r"
# type Pass for mount-script
expect "Enter passphrase"
send "$mount_pass\r"
# call & paste hostname
expect "Please provide a hostname for this instance,"
send "$hostname\r"
# type letter Y - for test environment
expect "Is this a test instance? Enter 'Y', otherwise press enter"
send "Y\r"
interact
我试图谷歌它我找到了主机名的命令,如
send 'lsnrctl status listener_`hostname`\r'
或
send "cat /etc/rc.d/rc.local |grep hostname \r\n"
我尝试将它们设置为SET HOSTNAME,我尝试通过命令send调用它们。不幸的是,它也不起作用。
这是输出
.......
dbg1.7>
1: expect "Please provide a hostname for this instance
dbg1.8>
Please provide a hostname for this instance
1: send 'lsnrctl status listener_`hostname`\r'
dbg1.9>
usage: send [args] string
while executing
"send 'lsnrctl status listener_`hostname`\r'"
(file "test01-expect.sh" line 38)
1: exit 1
我也对不同的解决方案持开放态度。 谢谢
答案 0 :(得分:2)
要获取计算机的主机名,是否可以使用终端命令hostname
?
Tcl有一个命令exec
,它将执行命令并返回结果。
set host_name [exec hostname]
或等同地
set host_name [ exec cat /etc/hostname]
不是将其保存到变量中,而是可以直接在send命令中使用,
expect "Please provide a hostname for this instance,"
send "[exec hostname]\r"
参考:exec