0

挿入された USB デバイスからマウント ポイントを出力する bash スクリプトを作成したいと考えています。2 つのコマンド ("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 new device は機能し、$UUID を確認できますが、lsblk コマンドは何もしません。lsblk --noheadings --output MOUNTPOINT /dev/disk/by-uuid/**realuuid**ターミナルにコマンドを入れると動作します。誰が何が悪いのか知っていますか?

4

1 に答える 1

0

この問題はタイミングの問題であり、(私にとっては) コマンドの検出と実行の間に 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
于 2021-01-02T13:40:16.613 に答える