我将以下代码作为.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
我该怎么做?
答案 0 :(得分:0)
似乎您正在使用iroot
来获得对电话的root访问权限,并以root身份发出命令。
我在这里假设您已经拥有的命令是非交互式的,并且如果您将重定向重定向到文件而没有任何人工干预,则会生成您想要的输出。
然后,常见的常见问题解答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脚本,而不是带有嵌入式Expect脚本片段的Shell脚本。也许然后看看expect: store output of a spawn command into variable
包含脚本的文件名可以是任何东西,但是标准建议是不要给扩展名-Unix不在乎,如果您的.sh
文件是一个Expect脚本(目前是这样)。
也许还切切地看到Difference between sh and bash和http://shellcheck.net/,可用于诊断(shell)脚本中的语法错误。