Я хотел бы автоматически скопировать некоторые файлы из запоминающего устройства после его вставки. Я рассчитываю использовать один и тот же метод в обеих системах, которые используют systemd, и в системах, использующих сценарии инициализации (например, OpenRC в Gentoo). Кроме того, я бы постарался не нарушать автомонтирование.
Из многих других вопросов, касающихся этой проблемы, я понял, что лучше всего это сделать с помощью udev, и это почти работает, если не выполнять постхук udev, выполняемый строго перед автомонтированием (таким образом, чтобы udev проверял состояние выхода любых сценариев) он вызывал и любые скрипты, которые вызывает скрипт, каким-то процессом, который для меня выглядит волшебством):
Выполнение скрипта работает, только то, что файл не может быть скопирован, потому что (я полагаю) триггер автоподключения ожидает, когда скрипт копирования завершится первым:
chymera@quiethost ~/.repositorg/transfer $ cat /etc/udev/rules.d/95-local.rules
ACTION=="add", KERNEL=="sd?1", ENV{ID_FS_UUID}=="4C3D-8BCB", RUN+="/bin/su chymera -c /home/chymera/.repositorg/transfer/4C3D-8BCB.sh"
chymera@quiethost ~/.repositorg/transfer $ cat 4C3D-8BCB.sh
#!/usr/bin/env bash
touch ~/lalax.txt
cp "/run/media/chymera/NIKON D750/lala.txt" ~/
chymera@quiethost ~/.repositorg/transfer $ ls ~/lal*
/home/chymera/lalax.txt
chymera@quiethost ~/.repositorg/transfer $ ls /run/media/chymera/NIKON\ D750/
DCIM lala.txt NIKON001.DSC
Добавление режима сна и переключение выполнения сценария на подоболочку, похоже, не работает. Файл не становится доступным, потому что теперь автомонтирование полностью заблокировано:
chymera@quiethost ~/.repositorg/transfer $ cat /etc/udev/rules.d/95-local.rules
ACTION=="add", KERNEL=="sd?1", ENV{ID_FS_UUID}=="4C3D-8BCB", RUN+="/bin/su chymera -c /home/chymera/.repositorg/transfer/_4C3D-8BCB.sh"
chymera@quiethost ~/.repositorg/transfer $ cat _4C3D-8BCB.sh
#!/usr/bin/env bash
nohup /bin/bash /home/chymera/.repositorg/transfer/4C3D-8BCB.sh & exit
chymera@quiethost ~/.repositorg/transfer $ cat 4C3D-8BCB.sh
#!/usr/bin/env bash
touch ~/lalax.txt
sleep 5
cp "/run/media/chymera/NIKON D750/lala.txt" ~/
chymera@quiethost ~/.repositorg/transfer $ ls ~/lal*
/home/chymera/lalax.txt
chymera@quiethost ~/.repositorg/transfer $ ls /run/media/chymera/