Я хочу создать сценарий bash, который будет выводить точку монтирования со вставленного USB-устройства. У меня есть две команды (между "do" "и "done"), которые работают отдельно, но не вместе в bash-скрипте. Сценарий ищет UUID файла использует имя файла $UUID в команде lsblk для извлечения точки монтирования Точка монтирования должна быть в переменной, чтобы я мог продолжать использовать это в том же сценарии bash. На данный момент у меня получилось следующее:

 #!/bin/bash

EXCLUDE_DEVICE_1="5F92-0F71"
EXCLUDE_DEVICE_2="6fd9f710-f897-4b13-a521-70e184f669f3"

inotifywait -m --exclude "($EXCLUDE_DEVICE_1|$EXCLUDE_DEVICE_2)" -e create --format '%f' /dev/disk/by-uuid/ \
        | while read UUID
                сделать
                        echo "Найдено новое устройство с uuid $UUID"
                        lsblk --noheadings --output MOUNTPOINT /dev/disk/by-uuid/$UUID
                готово

Эхо нового устройства работает и может видеть $UUID, но команда lsblk ничего не делает. Когда в терминале вводится команда lsblk --noheadings --output MOUNTPOINT /dev/disk/by-uuid/**realuuid**, она работает. кто-нибудь знает, в чем дело?

Coen17st

Ответов: 1

Ответы (1)

Проблема была связана с временем и может быть решена путем добавления (для меня) минимального времени сна в 0,2 секунды между обнаружением и выполнением команды


EXCLUDE_DEVICE_1="5F92-0F71"
EXCLUDE_DEVICE_2="6fd9f710-f897-4b13-a521-70e184f669f3"
LOG_FILE=/home/user/Documents/log.txt

exec > >(tee -a $LOG_FILE)
exec 2>&1

inotifywait -m --exclude "($EXCLUDE_DEVICE_1|$EXCLUDE_DEVICE_2)" -e create --format '%f' /dev/disk/by-uuid/ \\
        | while read UUID
                сделать
                        echo "найдено новое устройство с uuid: $UUID"
                        sleep 0.2
                        lsblk --noheadings --output MOUNTPOINT /dev/disk/by-uuid/$UUID
                done

2022 WebDevInsider