Bash IFS игнорирует часть строки - PullRequest
1 голос
/ 10 октября 2019

Я сохраняю вывод команды ssh, которую я запускаю из bash, в переменную, и я пытаюсь проанализировать ее и получить последнее значение, используя IFS, но он продолжает игнорировать часть, которая приходит из приложения Qt. Вот что я сделал:

#!/bin/bash
results=$(ssh remote 'dbus-send --system --print-reply --type=method_call --dest=com.something.SomeApp /SomeApp com.something.SomeApp.status' 2>&1)
echo $results
IFS=$' ' # space is set as delimiter
read -ra ADDR <<< "$results" # results are read into an array as tokens separated by IFS
for i in "${ADDR[@]}"; do # access each element of array
    printf '%s\n' "$i"
done

Вывод:

method return time=1570704023.543658 sender=:1.13063 -> destination=:1.14063 serial=5451 reply_serial=2 string "Idle"
method
return
time=1570700627.183948
sender=:1.13063
->
destination=:1.13308
serial=1183
reply_serial=2

Отсутствует: string и "Idle".

Если я скопирую вывод,Я захожу в терминал, вставляю его в скрипт bash и запускаю на нем IFS следующим образом:

#!/bin/bash
manual="method return time=1570703114.770058 sender=:1.13063 -> destination=:1.13859 serial=4306 reply_serial=2 string "Idle""
IFS=$' ' # space is set as delimiter
read -ra ADDR <<< "$manual"
for i in "${ADDR[@]}"; do
    printf '%s\n' "$i"
done

Есть ли скрытый символ, который мешает IFS прочитать всю строку, и как мне достичь своей цели, чтобы получитьвсю строку в массив?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...