期望具有可变主机名的脚本
Expect script with variable hostname
我想在重启数十台 UBUNTU 服务器(12.04 和 14.04)后使用 EXPECT 脚本装载卷。
我无法弄清楚如何将主机名设置为变量(例如从 /etc/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
我尝试 google 我发现主机名的命令像
send 'lsnrctl status listener_`hostname`\r'
或
send "cat /etc/rc.d/rc.local |grep hostname \r\n"
我尝试将它们设置为 SET HOSTNAME,并尝试通过命令发送调用它们。不幸的是,它也不起作用。
这是输出
.......
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
我也对不同的解决方案持开放态度。
谢谢
要获取机器的主机名,你不能使用终端命令hostname
吗?
Tcl 有一个命令 exec
,它将执行命令并 return 结果。
set host_name [exec hostname]
或者,等价地,
set host_name [ exec cat /etc/hostname]
无需将其保存到变量中,甚至可以直接在发送命令中使用,
expect "Please provide a hostname for this instance,"
send "[exec hostname]\r"
参考:exec
我想在重启数十台 UBUNTU 服务器(12.04 和 14.04)后使用 EXPECT 脚本装载卷。
我无法弄清楚如何将主机名设置为变量(例如从 /etc/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
我尝试 google 我发现主机名的命令像
send 'lsnrctl status listener_`hostname`\r'
或
send "cat /etc/rc.d/rc.local |grep hostname \r\n"
我尝试将它们设置为 SET HOSTNAME,并尝试通过命令发送调用它们。不幸的是,它也不起作用。
这是输出
.......
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
我也对不同的解决方案持开放态度。 谢谢
要获取机器的主机名,你不能使用终端命令hostname
吗?
Tcl 有一个命令 exec
,它将执行命令并 return 结果。
set host_name [exec hostname]
或者,等价地,
set host_name [ exec cat /etc/hostname]
无需将其保存到变量中,甚至可以直接在发送命令中使用,
expect "Please provide a hostname for this instance,"
send "[exec hostname]\r"
参考:exec