Как получить вывод команды в переменную? - PullRequest
0 голосов
/ 29 января 2019

Я выполнил приведенный ниже код в виде файла .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

Как я могу это сделать?

1 Ответ

0 голосов
/ 30 января 2019

Похоже, что вы используете iroot для получения root-доступа к телефону и запускаете команду от имени root.

Я предполагаю, что команда, которая у вас уже есть, не является интерактивной и выдает результат, который выЕсли вы извлекаете перенаправление в файл, без какого-либо вмешательства человека.

Затем простой вопрос захвата его выходных данных покрыт общим FAQ Как установить переменную для выходных данныхкоманда в 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

Если это не работает для вас, тогда Используйте ожидаемый в скрипте bash пароль для команды SSH имеет несколько вариантов, которые вы можете попробовать.

Вы также, кажется, не понимаете природу сценариев.Любой исполняемый файл, который имеет shebang в качестве своей первой строки, будет исполняемым любым интерпретатором, указанным там.У меня /bin/bash, так что это сценарий оболочки, а точнее Bash-скрипт, в то время как у вас expect в качестве интерпретатора, так что это сценарий Expect.У вас также обычно есть Awk-скрипты, Perl-скрипты и Python-скрипты (и реже, но не совсем необычные скрипты во многих, многих других языках).

Как уже упоминалось, Expect также является языком сценариев, и этоВозможно, вы захотите, чтобы ваш сценарий оставался Expect, а не сценарий оболочки со встроенным фрагментом сценария Expect.Возможно, затем посмотрите Ожидайте: сохранить вывод команды spawn в переменную

Имя файла, содержащего скрипт, может быть любым, но стандартная рекомендация - не давать ему расширение -- Unix не волнует, и читатели-люди будут сбиты с толку, если ваш .sh файл является сценарием Expect (как он есть в настоящее время).

Возможно, по касательной также посмотрите Разница между sh и bash а также http://shellcheck.net/, которые вы можете использовать для диагностики синтаксических ошибок в ваших (shell) скриптах.

...