【发布时间】:2015-04-22 05:27:20
【问题描述】:
我做了两个脚本:
这个获取 IP 地址和主机名:
#!/bin/bash
for i in `cat ~/script/hosts.txt`
do HOSTNAME=`echo $i|awk -F: '{print $1}'`
IP=`echo $i|awk -F: '{print $2}'`
TIMESTAMP=`date +%Y-%m-%d`
~/script/expect.sh $HOSTNAME $IP
done
这个是通过 SSH 连接到设备的:
#!/usr/bin/expect
set timeout 20
set HOSTNAME [lindex $argv 0]
set IP [lindex $argv 1]
exp_internal 1
spawn ssh -o StrictHostKeyChecking=no root@$IP
exit
我想制作一个脚本来 bakcup 多个设备配置。 问题是 SSH 由于以下错误而失败:
$ ./main.sh
spawn ssh -o StrictHostKeyChecking=no root@10.102.82.235
: Name or service not knownname 10.102.82.235
spawn ssh -o StrictHostKeyChecking=no root@10.102.82.239
: Name or service not knownname 10.102.82.239
当我调试时,我看到以下错误
spawn id exp4 sent <ssh: Could not resolve hostname 10.102.82.235\r\r: Name or
service not known\r\r\n>
: Name or service not knownname 10.102.82.235
我认为问题是由于这些字符造成的:“\r\r”、“\r\r\n” 有什么办法可以过滤掉这些吗?
【问题讨论】:
-
为什么不使用 tr -d '\r\r' $IP 它会去掉回车
-
放在哪里?我不擅长编程或脚本!
-
您需要修复“hosts.txt”文件:它包含 DOS
\r\n行尾。使用dos2unix hosts.txt -
@glennjackman 你是对的。我尝试转换,但转换后仍然包含下一行的返回字符。是否可以在 Expect 脚本中过滤输入?
-
是的。
set hostname [regsub {\r$} [lindex $argv 0] ""]和set ip ...类似