jq добавляет данные и сохраняет остальные

триггер удевадм

1. попробуй

sudo udevadm trigger --verbose --action=remove --property-match='DEVNAME=/dev/sdd'

инициирует событие /dev/sddremove uevent, содержимое как

remove@/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd
ACTION=remove
DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd
SUBSYSTEM=block
MAJOR=8
MINOR=48
DEVNAME=sdd
DEVTYPE=disk
SEQNUM=12589

2. straceэто

посмотри, что он дозирует:

sudo strace udevadm trigger --verbose --action=remove --property-match='DEVNAME=/dev/sdd'
...
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 37),...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc0596a7000
write(1, "/sys/devices/pci0000:00/0000:00:"..., 101/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd
) = 101
open("/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host13/target13:0:0/13:0:0:0/block/sdd/uevent", O_WRONLY) = 3
write(3, "remove", 6)                   = 6
close(3)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

3. обобщить

на самом деле это только

echo 'remove' | sudo tee /sys/block/sdd/uevent

таким образом все еще зависит от sysfs:

  • sysfs устройства должны существовать
  • невозможно полностью настроить тело сообщения uevent

файл sysfs uevent:

cat /sys/block/sdd/uevent
MAJOR=8
MINOR=48
DEVNAME=sdd
DEVTYPE=disk

ссылки:
http://fibrevillage.com/sysadmin/93-udevadm-useage-exampleshttp://arakilab.media.eng.hokudai.ac.jp/~msylw/2013/07/using-udev-to-trigger-events-in-example/

0
03.01.2020, 12:43
1 ответ

Предполагая, что вы хотите добавить к JSON, который вы показываете, и что документ JSON правильно сформирован,

$ cat file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test"
    ]
  }
}

ты можешь сделать

$ jq '.access.allowed_users |=. + ["test32"]' file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test",
      "test32"
    ]
  }
}

Это взято непосредственно из jqруководства, из раздела "Сложные назначения". Он использует «оператор модификации» |=для изменения массива, присваивая ему новый элемент.

С новым значением в переменной оболочки:

$ data='My "awesome" data'
$ jq --arg value "$data" '.access.allowed_users |=. + [$value]' file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test",
      "My \"awesome\" data"
    ]
  }
}

Чтобы внести эти изменения в файл, используйте временный файл:

jq...one-of-the-above-approaches... file.json >tmp.json &&
mv tmp.json file.json

&&предотвращает перезапись исходного файла, если jqпо какой-то причине дает сбой.

2
28.01.2020, 02:38

Теги

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