Как преобразовать вывод оболочки в JSON?

Вы можете попробовать редактор файловой системы, например debugfs(8). Это тонкая, детальная работа. Но я очень сомневаюсь, что вы сможете это исправить, если fsck(8) не может/не хочет исправить проблему, то она, вероятно, очень серьезная (или, по крайней мере, запредельная).

Сделайте резервную копию содержимого файловой системы. Затем вы можете получить его копию в файл с помощью dd(1) и повозиться с копией. Если вам удастся все исправить, воспроизведите команды на оригинале.

Или просто сделайте резервную копию и переформатируйте.

Проверьте носитель, если он хоть немного сомнительный, выбросьте его. Данные, которые вы храните на нем, гораздо ценнее.

0
03.12.2018, 21:29
2 ответа

Можно было обойтись и обычным башом:

json=$(
    sh MACscript.sh | {
        pairs=()
        while read interface; read ether; do
            pairs+=("\"$interface\":\"$ether\"")
        done
        IFS=,
        echo "{${pairs[*]}}"
    }
)
echo "$json"

выходы

{"eth0":"11:1d:11:11:11:1d","lo":"00:00:00:00:00:00"}
3
28.01.2020, 02:23

вы можете использовать различные способы получения значений json. bash, python, perl,.....
Вы можете найти полезные сообщения об этом на этом веб-сайте. однако вот пример:

  arr1=($( ls /sys/class/net))
  arr2=($( cat /sys/class/net/*/address ))

  vars1=(${arr1[@]})
  vars2=(${arr2[@]})
  len=${#arr1[@]}

  printf "{\n"
  printf "\t"'"data"'":[\n"

  for (( i=0; i<len; i+=1 ))
  do
  printf "\t{  "'"{#interface}"'":\"${vars1[i]}\",\t"'"{#address}"'":\"${vars2[i]}\"  
  }"

  if [ $i -lt $((len-1)) ] ; then
    printf ",\n"
  fi
  done
  printf "\n"
  printf "\t]\n"
  printf "}\n"
  echo  

выход:

{
    "data":[
    {  "{#interface}":"eth0",       "{#address}":"00:50:56:a9:c0:81"  },
    {  "{#interface}":"lo", "{#address}":"00:00:00:00:00:00"  }
    ]
}

и вы можете использовать этот веб-сайт для проверки вашего JSON:https://codebeautify.org/online-json-editor

0
28.01.2020, 02:23

Теги

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