标签: expect

在网络中自动化 scp 的脚本

我有一个充满 Linux 机器的网络。在这个网络中,我有一个用户为user1,所有机器的密码为密码。

我有以下脚本将文件放在网络所有机器中user1的主目录中。

#!/usr/bin/expect -f

# connect via scp
spawn cat /home/user1/Desktop/IPlistfile.txt | while read line do
spawn scp /home/user1/Desktop/filetobesent.txt user1@${line}:/home/user1/Desktop
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "password\r"
}
}
interact
done
Run Code Online (Sandbox Code Playgroud)

问题是我收到一条错误消息“ can't read line. No such variable”。但是,如果我直接使用 IP 地址而不是行变量,则可以传输文件。

编辑:IPlistfile.txt 包含我网络中的 IP 地址列表。每行包含一个 IP 地址。

scripting ssh expect

3
推荐指数
1
解决办法
3万
查看次数

如何让 `expect` 忽略密码中的 $(美元符号)?

我正在运行一个expect脚本,密码有一个$字符。外壳会寻找以下字符以扩展成某些内容并吐出no such variable。

有没有办法解决?

scripting expect variable

3
推荐指数
1
解决办法
3736
查看次数

期望自动回答 CLI

当我ambari-server upgrade从 bash 脚本运行命令时,在升级过程中我们遇到了问题

已经备份了 Ambari Server 数据库 [y/n] (y)?

所以我们想自动化这个过程,通过期待yes在问题出现时发送的脚本。

请建议如何ambari-server upgrade通过期望自动化

ambari-server upgrade

Using python  /usr/bin/python
Upgrading ambari-server
INFO: Upgrade Ambari Server
INFO: Updating Ambari Server properties in ambari.properties
...
WARNING: Can not find ambari.properties.rpmsave file from
previous version, skipping import of settings
INFO: Updating Ambari Server properties in ambari-env.sh ...
INFO: Can not find ambari-env.sh.rpmsave file from previous
version, skipping restore of environment settings. ambari-env.sh may not
include any user customization. …
Run Code Online (Sandbox Code Playgroud)

linux shell-script expect

3
推荐指数
1
解决办法
820
查看次数

如何使用“-c”选项将参数传递给 EXPECT?

我通过 usingexpect在我的 bash 脚本中使用expect -c,但是如何将参数传递给它?

这是我尝试过的:

FILE="myFile"
HOST="myhostname" 

/usr/bin/expect -c $FILE $HOST '
        set FILE [lindex $argv 0];
        set HOST [lindex $argv 1];
        send_user "$FILE $HOST"
        spawn scp -r -o StrictHostKeyChecking=no  $FILE root@$HOST:/tmp/
        expect "assword:"
        send "password\r"
        interact'
Run Code Online (Sandbox Code Playgroud)

如果我创建一个单独的具有相同内容的期望脚本,但在 bash 中像这样调用它:

myScript.expect $FILE $HOST
Run Code Online (Sandbox Code Playgroud)

它有效,但我如何做同样的事情但使用该expect -c选项?

更新:

还试过:

/usr/bin/expect -c '
        set FILE [lindex $argv 0];
        set HOST [lindex $argv 1];
        send_user "$FILE $HOST"
        spawn scp -r -o StrictHostKeyChecking=no  $FILE root@$HOST:/tmp/
        expect "assword:"
        send …
Run Code Online (Sandbox Code Playgroud)

shell scripting bash shell-script expect

3
推荐指数
1
解决办法
7451
查看次数

使用 yes 命令死锁

我有一个脚本叫做setup.sh:

. install.sh && . tolinux.sh && . startn.sh && . startm.sh
Run Code Online (Sandbox Code Playgroud)

这是install.sh:

yes | sudo apt-get update
yes | sudo apt-get install default-jdk
yes | sudo apt-get install expect
sudo apt-get install lftp

cd /usr/local/src/
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar xf noip-duc-linux.tar.gz
cd noip-2.1.9-1/

/usr/bin/expect <<END_SCRIPT
spawn make install
expect "Please enter the login/email*" { send "Username\r" }
expect "Please enter the password for user*" { send "password\r" }
expect "Please enter an update interval*" { send …
Run Code Online (Sandbox Code Playgroud)

apt expect

2
推荐指数
1
解决办法
300
查看次数

预期脚本中的猫在字符串末尾添加新行

我在expect脚本中有以下内容

spawn cat version
expect -re 5.*.*
set VERSION $expect_out(0,string)
spawn rpm --addsign dist/foo-$VERSION-1.i686.rpm
Run Code Online (Sandbox Code Playgroud)

该cat命令正在正确获取版本,但它似乎添加了一个新行。因为我希望输出如下:

dist/foo-5.x.x-1.i686.rpm

但是我在开头包含以下错误:

cannot access file dist/foo-5.x.x
-1.i686.rpm
Run Code Online (Sandbox Code Playgroud)

为什么expect在cat命令输出中添加一个新行,有什么方法可以不这样做或修复 cat 命令的输出?

linux expect cat newlines output

2
推荐指数
2
解决办法
1320
查看次数

生成 bash 脚本时,Expect 脚本返回错误。为什么?

我正在测试 Expect 以使基本模板正常工作。我创建了一个演示 bash 脚本,它会询问一些问题并将输入输出到文件中。

当我直接或通过“expect FILENAME”执行 .exp 文件时,甚至在使用 autoexpect 时,我都会收到以下错误,表明它没有被正确解释(预期的 .exp 文件?)。我应该怎么做才能让 bash 脚本运行 Expect?

  • 我正在测试通过 WSL 使用 Ubuntu 作为操作系统和 CMD(执行 bash 以使用 WSL 和普通 bash 命令可用,因此不确定这是否有任何影响。)。

期待文件:

#!/usr/bin/expect -f

set timeout -1

spawn /bin/bash "./test-interactive.sh"
# expect "*"
expect "Please fill in each prompt."
send -- "a\r"
expect "*"
send -- "b\r"
expect "Please fill in each prompt."
# expect "*"
send -- "c\r"
expect "*"
send -- "d\r"
expect eof
Run Code Online (Sandbox Code Playgroud)

Bash 外壳文件:

#!/bin/bash

_message="Please fill in each …
Run Code Online (Sandbox Code Playgroud)

bash expect

2
推荐指数
1
解决办法
761
查看次数

期望脚本多个 Q/A

我有以下期望脚本:

#!/usr/bin/expect

set timeout 20

set cmd "/path/vpntool  --server 1.2.3.4:443 --vpnuser user"
set password [lindex $argv 0]

eval spawn $cmd
expect "VPN:"
send "$password\r";
interact

expect ".*\(Y\/N\)"
send "Y\r";

interact
Run Code Online (Sandbox Code Playgroud)

脚本在问题“您想连接到此服务器吗?(是/否)”处停止等待答案。

有谁知道可能是什么问题?

expect

2
推荐指数
1
解决办法
387
查看次数

如何解决使用“expect”时远程终端屏幕混乱的问题?(通常在调整大小之后)

使用expectssh 和密码自动登录远程,调整窗口大小时,stty size报告旧大小。vim导致诸如和 之类的命令less变得混乱。

shell ssh remote expect

2
推荐指数
1
解决办法
557
查看次数

作为另一个用户在 bash 脚本中运行 expect

我正在编写一个 bash 脚本来安装我正在开发的一些小软件。该脚本以sudo(以 root 身份)运行,但脚本执行的某些命令需要(或应该)由我将其名称保留在$userName变量中的普通用户运行。大多数命令都是单行的,而且su -c "/what/ever/command" $userName效果很好。

但是,我不想运行的其中一个命令root会问我一些事情(实际上,只有一件事,但很多次:是否应该覆盖现有文件)。我可能称之为“ baaad_command”的那个命令没有提供默认答案的任何选项(没有“ --assume-no”或类似的东西)。

我看是可行的唯一选择是使用预期的命令,并回复“ n\r”命令输出和串巫婆开始与每一次“ Overwrite”,我想我的脚本没有答复(意为“ n\r“)多次baaad_command问"Overwrite... ? [y/n]"

我尝试了许多不同的 su、spawn、expect 组合……但没有任何运气。

这是我迄今为止的最后一次尝试:

#!/bin/bash
if [[ -d "$destinationFolder" ]] ; then
    if [[ -n "$userName" ]] ; then
        spawned=$(su -c expect -c "
            spawn baaad_command --user \"foo\" --passwd \"bar\" \"$destinationFolder\"
             expect {
                 Overwrite: { send \"n\r\"; exp_continue }
                 eof { exit }
             }
        " )
    else …
Run Code Online (Sandbox Code Playgroud)

scripting bash su expect

1
推荐指数
1
解决办法
4092
查看次数

标签 统计

expect ×10

scripting ×4

bash ×3

linux ×2

shell ×2

shell-script ×2

ssh ×2

apt ×1

cat ×1

newlines ×1

output ×1

remote ×1

su ×1

variable ×1