如何获得在可变命令输出?

问题描述 投票:0回答:1

我执行下面的代码为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

我怎样才能做到这一点?

bash expect
1个回答
0
投票

看来,您正在使用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在(外壳)脚本。

© www.soinside.com 2019 - 2024. All rights reserved.