期望具有可变主机名的脚本

时间:2015-11-12 18:21:14

标签: variables ubuntu scripting expect hostname

我想在重新启动数十台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

我也对不同的解决方案持开放态度。 谢谢

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