在期望脚本之前和之后使用bash命令

时间:2018-12-21 13:46:46

标签: bash expect

简而言之,我想输入脚本的名称,该脚本的名称将提示用户输入跳转框的主机名,登录名和密码,然后该脚本将运行一系列命令,例如ping设备,scp文件到其他主机等...当前,我只是让脚本运行一个简单的ls -lrt。

但是,当我运行脚本时,一切都可以正常登录,但是一旦我进入主机,脚本便会结束。我希望了解如何在登录后停止脚本,以便随后可以从脚本中运行新命令。

我在这里浏览了一系列页面,但没有发现任何关于此的内容。

#!/bin/bash
echo -n "Logging in to server at HOSTNAME"
echo
echo -n "Hostname:"
read -s host
echo
echo -n "Username:"
read -s user
echo
echo -n "Password:"
read -s PWD
echo

/usr/bin/expect <<EOF
set timeout 1
spawn ssh $user@$host
expect "password:"
send "$PWD\n"
expect eof


ls -lrt

这是我得到的结果:

Logging in to server at
Username:
Password:
spawn ssh user@host
user@host's password:

-bash-4.1$ home/Desktop:~ userid$

home / Desktop:〜userid $是跳回跳转框之外的会话窗口的提示。

1 个答案:

答案 0 :(得分:0)

您对expect的语法似乎不正确。 根据您的查询,您希望将文件scp到远程主机,无论如何,我可以通过以下语法为您提供帮助:

/usr/bin/expect <<EOF
set timeout -1
spawn /usr/bin/sftp ${user_name}@${HOSTNAME}
expect "password:"
send "${passwd}\r"
expect "sftp>"
send "cd /the_path/to_put_files/\r"
expect "sftp>"
send "mput *\r"
expect "sftp>"
send "bye\r"
EOF

ls -lrt

set timeout -1 ==用于将n个文件发送到远程服务器,而没有超时限制。

希望这会有所帮助。