首页 > 解决方案 > (usb)设备检测上的输出挂载点

问题描述

我想创建一个 bash 脚本,它将从插入的 USB 设备输出挂载点。我有两个命令(在“do”和“done”之间)单独工作,但不能在 bash 脚本中一起工作。脚本查找 UUID 文件,使用 lsblk 命令中的 $UUID 文件名来提取挂载点 挂载点必须放在一个变量中,这样我就可以在同一个 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
                do 
                        echo "new device found with uuid $UUID"
                        lsblk --noheadings --output MOUNTPOINT /dev/disk/by-uuid/$UUID
                done

echo 新设备可以工作并且可以看到 $UUID 但 lsblk 命令什么也不做。将命令lsblk --noheadings --output MOUNTPOINT /dev/disk/by-uuid/**realuuid**放入终端时,它可以工作。有谁知道出了什么问题?

标签: linuxbashinotifywait

解决方案


问题是时间问题,可以通过在检测和执行命令之间添加(对我而言)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
                do 
                        echo "new device found with uuid: $UUID"
                        sleep 0.2
                        lsblk --noheadings --output MOUNTPOINT /dev/disk/by-uuid/$UUID
                done

推荐阅读