Хорошо, я наконец нашел причину. Initramfs не был ключом к успеху.Получается, что routerboard работает, если он был загружен с нажатой кнопкой сброса. Но похоже, что прошитый драйвер долго не протянет. Маршрутизатор перезагружается с ошибкой ядра через несколько часов использования в зависимости от скорости загрузки.
Чтобы заменить любой //
на /
, вам потребуется очистить watchlist
. Рассмотрим каталог с именем \nabc
(, где \n
— новая строка ):
$ mkdir t
$ mkdir t/$'\nabc'
$ touch t/$'\nabc'/x
При передаче каталога t//$'\nabc'
вы увидите вывод с поддельным //
в конце строк:
$ inotifywait -m -r t//$'\nabc' --format "%e %w%f//"
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
OPEN t//
abc/x//
ATTRIB t//
abc/x//
CLOSE_WRITE,CLOSE t//
abc/x//
Обратите внимание: вы также можете использовать -c
вместо --format
для получения вывода в стиле csv , в котором имена файлов в двойных -кавычках с переводом строки, но это сложнее анализировать, и в моем случае дампы ядра на приведенном выше примере.
Пример вывода для -c
иtouch t/$'new\nfile'
:
t/,CREATE,"new
file"
Существует ответвление , которое поддерживает вывод с разделителями NUL -. Вы можете использовать его следующим образом:
#!/bin/bash
shopt -s extglob
watchlist=("${@}")
# Remove trailing slashes from any watchlist elements
watchlist=("${watchlist[@]%%+(/)}")
printf -vnewline "\n"
inotifywait -qrm "${watchlist[@]}" --format "%e %w%f%0" | \
while IFS= read -r -d '' line; do
events="${line%% *}"
filepath="${line#* }"
printf "events=%s\nfilepath=%q\n" "$events" "$filepath"
done
Обратите внимание, что эта версия не добавляет новую строку по умолчанию при использовании формата --.