linux - (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**
放入终端时,它可以工作。有谁知道出了什么问题?
解决方案
问题是时间问题,可以通过在检测和执行命令之间添加(对我而言)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
推荐阅读
- neo4j - Neo4J OGM 映射自定义对象
- svn - SVN 提交的奇怪问题(无法提交带有 *.conf* 扩展名的文件)
- android - React Native:无法通知项目评估侦听器。> JAVA_LETTER_OR_DIGIT
- powershell - Powershell:在多次设置内容和获取内容操作期间对文件进行独占锁定
- c++ - 计算正则表达式的出现次数 с++
- javascript - 反应 js 本地存储值对象
- python - QSetting 和 QWidgets 类的序列化和反序列化
- android - RecyclerView OnItemClick 返回 IndexOutOfBoundsException
- javascript - JS mouseenter -> 加速度值增加;mouseleave -> 减速值减小
- c# - 如何将游戏对象的静止变换设置为移动变换?