如何获取变量中的命令输出?
How to get the command output in variable?
我将下面的代码作为 .sh 文件执行并得到了预期的结果。现在我需要存储 "send" 命令的输出并做进一步的事情。
我已经完成了下面的 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
获取对 phone 的 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 "[=10=]: You're kidding, right?" >&2
exit 127;;
*) echo "[=10=]: 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 脚本。也许然后看到
包含脚本的文件的名称可以是任何名称,但标准建议是不要给它扩展名——Unix 不关心,如果您的 .sh
人类读者会感到困惑文件是一个 Expect 脚本(目前是)。
也许另见 Difference between sh and bash as well as http://shellcheck.net/,您可以使用它来诊断 (shell) 脚本中的语法错误。
我将下面的代码作为 .sh 文件执行并得到了预期的结果。现在我需要存储 "send" 命令的输出并做进一步的事情。
我已经完成了下面的 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
获取对 phone 的 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 "[=10=]: You're kidding, right?" >&2
exit 127;;
*) echo "[=10=]: 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 脚本。也许然后看到
包含脚本的文件的名称可以是任何名称,但标准建议是不要给它扩展名——Unix 不关心,如果您的 .sh
人类读者会感到困惑文件是一个 Expect 脚本(目前是)。
也许另见 Difference between sh and bash as well as http://shellcheck.net/,您可以使用它来诊断 (shell) 脚本中的语法错误。