bash脚本中的Expect命令失败

mobrien118

我已经对此进行了相当多的调整,但我陷入了奇怪的输出流而没有结果。基本上,我试图在我们的扩展网络上找到具有特定密码和处理器的某些ssh设备。这是脚本:

#/bin/bash
for i in 54
do
  for j in 1 13 14 15
  do
    out=$(expect -c "spawn /usr/bin/ssh [email protected].$i.$j cat /proc/cpuinfo | grep MyString
      expect {
        -re \".*Are.*.*yes.*no.*\" {
        send \"yes\n\"
        exp_continue
        }

        \"*?assword:*\" {
        send \"mypasswd\"
        send \"\n\"
        exp_continue
        }
      }")
    if [["$out" != ""]]
    then
      echo "10.2.$i.$j" >> rpiout.txt
    fi
  done
done

ssh命令本身可以正常工作。另外,期望脚本也可以正常工作。另外,如果我在“ if [[...]]”语句之前插入“ echo $ out”,则可以从SSH命令获得预期的输出。但是,尝试写入文件时,我将此输出输出到命令行,并且没有日志文件...:

./check.sh: line 19: [[spawn /usr/bin/ssh some_guy:@10.2.54.1 cat /proc/cpuinfo | grep MyString
some_guy:@10.2.54.1's password:
Permission denied, please try again.
some_guy:@10.2.54.1's password:
Permission denied, please try again.
some_guy:@10.2.54.1's password:
: No such file or directoryy,password).
./check.sh: line 19: [[spawn /usr/bin/ssh some_guy:@10.2.54.13 cat /proc/cpuinfo | grep MyString
some_guy:@10.2.54.13's password:
: No such file or directory
./check.sh: line 19: [[spawn /usr/bin/ssh some_guy:@10.2.54.14 cat /proc/cpuinfo | grep MyString
some_guy:@10.2.54.14's password:
: No such file or directory
: No such file or directoryawn /usr/bin/ssh some_guy:@10.2.54.15 cat /proc/cpuinfo | grep MyString

第一个要求输入密码3次的密码是正确的(因为它不是目标设备之一)。后两个是不存在的IP设备,但后两个应该返回肯定的结果。

请注意,在“错误”“ ./check.sh:第19行:[[spawn ...”中,第19行是以” if [[...”开头的行。

非常感谢让我摆脱困境的任何帮助!!

格伦·杰克曼

在bash[[中,不仅是语法,而且是命令像任何其他命令一样,它需要空格将其与参数分开。

不是

if [["$out" != ""]]

if [[ "$out" != "" ]]

或者

if [[ -n "$out" ]]

此外,由于预期相呼应,就像你在终端看到该命令的方式,这是不可能的输出将永远是空的。尝试这样的事情:

out=$( expect <<END
    spawn -noecho /usr/bin/ssh [email protected].$i.$j sh -c {grep -q MyString /proc/cpuinfo || echo _NOT_FOUND_}
    expect {
        -re ".*Are.*.*yes.*no.*" {
            send "yes\r"
            exp_continue
        }
        "*?assword:*" {
            send "mypasswd\r"
            exp_continue
        }
        eof
    }
END
)

if [[ $out == *_NOT_FOUND_* ]]; then
    echo "MyString not found on host 10.2.$i.$j"
fi

_NOT_FOUND_您在/ proc / cpuinfo中看不到的一些字符串在哪里

-noecho这里至关重要,除非您回显它,否则将$ _out中的“ _NOT_FOUND_”排除在外。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

bash脚本中的Expect命令失败

来自分类Dev

如何使用bash脚本中的Expect和send命令执行sudo命令?

来自分类Dev

在Expect脚本中运行bash脚本

来自分类Dev

无法在Expect脚本中执行bash脚本

来自分类Dev

在Expect脚本中运行bash脚本

来自分类Dev

Bash脚本中的SSH + Sudo + Expect:在远程计算机中使用sudo运行命令

来自分类Dev

Bash脚本在命令失败时退出(sshpass)

来自分类Dev

为什么此shell脚本在bash中失败,但是命令在SSH中起作用?

来自分类Dev

Perl脚本中的Bash命令

来自分类Dev

Perl脚本中的Bash命令

来自分类Dev

bash脚本中的增量命令

来自分类Dev

bash脚本中的Tar命令

来自分类Dev

bash脚本中的命令无效

来自分类Dev

bash脚本中的sudo命令暂停脚本

来自分类Dev

Powershell脚本在“复制项”命令中失败

来自分类Dev

如何从Expect脚本中的命令获取退出状态

来自分类Dev

为什么在bash脚本vs bash命令行中运行相同的sed regex(在grep之后)失败?

来自分类Dev

从Expect脚本运行本地命令

来自分类Dev

rsync失败,但仅在bash脚本中

来自分类Dev

bash中的Expect脚本的文件名扩展

来自分类Dev

在cron上运行的bash脚本使某些命令失败

来自分类Dev

使用mysql命令且变量失败的Bash脚本

来自分类Dev

Bash脚本在命令行起作用的地方失败

来自分类Dev

如何在 bash 中检查失败的命令?

来自分类Dev

无法在bash脚本中执行shell命令

来自分类Dev

在bash脚本中创建which命令

来自分类Dev

无法在bash脚本中运行adb命令

来自分类Dev

在bash脚本中从当前终端运行命令

来自分类Dev

在bash脚本中找不到mkdir命令