Как извлечь телефонную книгу из устройства Android

Рассмотрим следующий сценарий оболочки:

function thetee {
    tee data.out
}

function thepipe {
    echo "Hello!"
}

while true; do
    echo "Hi there!"
done | thetee | thepipe

echo "Done."

Цикл while - это генератор неограниченного количества строк с текстом «Привет! ! ».

Запуск:

$ sh script.sh
Hello!
Done.

Затем посмотрите на количество строк в data.out :

$ wc -l data.out
     274 data.out

Еще раз:

$ sh script.sh
Hello!
Done.

$ wc -l data.out
     236 data.out

Проблемы:

  1. Бесконечный цикл не бесконечен.
  2. Количество выходных строк различается между запусками.

Причины:

  1. Функция thepipe в моем примере просто выводит эхом строку, а затем завершается, что приводит к сбою канала. На последнем этапе конвейера дальнейшие входные данные не могут быть обработаны, и цикл завершается.

  2. Количество строк, фактически записанных в data.out , зависит от того, как быстро оболочка сможет запустить конвейер и как быстро функция thepipe выполнит свою работу и завершит работу. .

В вашем случае это происходит так быстро, что никакой ввод от генератора данных ( mosquitto_sub ) не может поступить в функцию tee .

Решение:

Сделать так, чтобы функция thepipe фактически потребляла входные данные :

function thepipe {
    echo "Hello!"
    cat
}

Это заставит код в моем примере вывести одиночное «Hello!». с последующим бесконечным "Привет!" (которые также сохраняются в data.out ). echo в конце никогда не будет выполняться.

Следовательно:

Измените определение вашей функции testPipe аналогичным образом. Например:

function testPipe(){
        echo "va"
        cat
}

Это приведет к потреблению ввода и отправке его на следующий этап конвейера или, если он находится в конце конвейера, туда, куда стандартный вывод будет перенаправлен после него (с строка, содержащая строку va в начале потока).

3
16.01.2017, 16:55
2 ответа

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

  1. Перейти к контактам
  2. Щелкните тройную точку в верхнем левом углу
  3. Щелкните Импорт / Экспорт
  4. Экспорт в файл .vcf
  5. Сохраните его где-нибудь, чтобы получить к нему доступ со своего компьютера Linux
  6. Скопируйте его через

Чтобы импортировать их, вы просто выполните те же шаги, но вы вместо этого выберите импорт.

У меня есть Moto-G, и он мне подходит!

4
27.01.2020, 21:18

На других телефонах Android --, таких как Verizon Samsungs --, вам, возможно, придется использовать опцию «поделиться», так как опция «Импорт/Экспорт» отсутствует.

  1. зайти в приложение "Телефон"
  2. перейти на вкладку Контакты
  3. нажмите на три вертикальные точки, чтобы открыть меню
  4. выберите «Поделиться»
  5. выберите все, нажав на флажок в левом верхнем углу
  6. нажмите несколько раз
  7. открыть файл на новом устройстве
  8. он может запросить у контактов доступ к вашим файлам
  9. , а затем он должен спросить, хотите ли вы импортировать его
1
27.01.2020, 21:18

Теги

Похожие вопросы