我执行下面的代码为sh文件和获得的结果如预期。现在我需要进一步存放“发送”命令的输出和做的事情。
我也做了以下的bash代码,现在我在保存文件中的输出:
#!/usr/bin/expect -f
spawn iroot
expect ".* password for"
sleep 3
send "password\r"
sleep 5
send "dmidecode -t system | grep Manufacturer > /tmp/manfacdetails.txt\r"
send "exit\r"
interact
我怎样才能做到这一点?
看来,您正在使用iroot
获取对手机的root访问权限,并发出命令,作为根。
我在这里假设你已经拥有了命令是非交互式,并产生你想,如果你拿出重定向到文件的输出,无需任何人工交互。
然后,捕捉其输出的简单的事情,是由普通FAQ How to set a variable to the output of a command in Bash?覆盖
#!/bin/bash
manufacturer=$(expect <<\____HERE)
spawn iroot
expect ".* password for"
sleep 3
send "password\r"
sleep 5
send "dmidecode -t system | grep Manufacturer\r"
send "exit\r"
interact
____HERE
if [ "$manufacturer" = "Motor Ola" ]; then
ola=1
fi
# Maybe you'll prefer case over if, though
case $manufacturer in
"Samsung" | "LG" ) korean=1 ;;
"Apple")
echo "$0: You're kidding, right?" >&2
exit 127;;
*) echo "$0: Unknown manufacturer $manufacturer" >&2
exit 1;;
esac
如果这不适合你,然后Use expect in bash script to provide password to SSH command有你可能想尝试一些变种。
你似乎也感到困惑脚本的本质。其中有一个shebang作为其第一行中的任何可执行文件会以任何解释指定有可执行文件。该矿已/bin/bash
所以这是一个shell脚本和更特别的bash脚本,而你有expect
作为其解释,所以它是一个Expect脚本。你也通常具有的awk脚本和Perl脚本和Python脚本(和不太常见,但在其他许多语言并不罕见脚本)。
如前所述,期待也是一种脚本语言,它是可能的,你想为你留一个Expect脚本,而不是一个嵌入式Expect脚本片段的shell脚本。也许那时看到expect: store output of a spawn command into variable
该文件中包含的脚本的名称可以是任何东西,但标准的建议是不给它的延伸 - Unix的不关心,与人类读者,如果你的.sh
文件是一个Expect脚本(目前被混淆,因为它是)。
也许切线又见Difference between sh and bash以及http://shellcheck.net/你可以用它来诊断语法errrors在(外壳)脚本。