Вы можете получить длину строки переменной, используя $ {# variable}
. И вы должны использовать -gt
вместо >
в выражении [
]
.
#!/bin/bash -
pass=$(cat < "$1") || exit
if [ "${#pass}" -gt 32 ]; then
echo >&2 "Error: Password length invalid"
exit 1
else
echo "okay"
fi
Подсчитывается количество символов (интерпретируемых в кодировке текущей локали), а не байтов, в файле, переданном в качестве первого аргумента, за исключением завершающих символов новой строки, поэтому для файла, содержащего одну строку текста, вы получите номер символов в этой строке.
Задержка, вероятно, вызвана udisk2
& udev.
$ ps -eaf|grep [u]disk
root 17041 1 0 09:48 ? 00:00:00 /usr/libexec/udisks2/udisksd
Может запрашивать устройства хранения вот так:
$ udisksctl status
MODEL REVISION SERIAL DEVICE
--------------------------------------------------------------------------
VBOX HARDDISK 1.0 VBc5aaf476-f419b1f1 sda
Если вы посмотрите на процесс udisk2
:
$ lsof -p $(pidof udisksd) | tail
udisksd 17041 root 3u unix 0xffff88003a49d400 0t0 611852 socket
udisksd 17041 root 4u a_inode 0,9 0 4852 [eventfd]
udisksd 17041 root 5u a_inode 0,9 0 4852 [eventfd]
udisksd 17041 root 6u unix 0xffff88003a49c000 0t0 611853 socket
udisksd 17041 root 7u a_inode 0,9 0 4852 [eventfd]
udisksd 17041 root 8r REG 0,3 0 611907 /proc/17041/mountinfo
udisksd 17041 root 9r REG 0,3 0 4026532019 /proc/swaps
udisksd 17041 root 10r a_inode 0,9 0 4852 inotify
udisksd 17041 root 11u netlink 0t0 611910 KOBJECT_UEVENT
udisksd 17041 root 12u a_inode 0,9 0 4852 [eventfd]
Там не так много всего, главное, что бросается в глаза, это inotify
. Всякий раз, когда я это вижу, я сразу же думаю об udev.
$ find /etc/udev/rules.d/ /usr/lib/udev/rules.d | grep sto
/usr/lib/udev/rules.d/90-alsa-restore.rules
/usr/lib/udev/rules.d/60-persistent-storage.rules
/usr/lib/udev/rules.d/60-persistent-storage-tape.rules
Второй файл выглядит интересно, загляните внутрь. Эта строка выглядит как причина:
$ cat /usr/lib/udev/rules.d/60-persistent-storage.rules
...
# enable in-kernel media-presence polling
ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"
ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"