Я считаю, что ошибку «Отказано в доступе» легко решить, манипулируя /sys/kernel/debug/tracing/set_event
от имени пользователя root.
Еще одна идея состоит в том, чтобы выяснить, возникла ли ваша проблема с самого начала или что-то ее вызвало. В первом случае наивным подходом было бы загрузиться с большинством отключенных драйверов, а затем повторно включить их один за другим, чтобы найти виновника.
Если что-то вызывает проблему, нам нужно знать, что именно. Я видел случаи, когда чрезмерная загрузка ЦП была вызвана скачком дискового ввода-вывода, и настройка параметров /proc/sys/vm/
, связанных с кэшированием, очень помогла.
Ваша проблема решена Почему мой сценарий оболочки подавляется пробелами или другими специальными символами? . Я просто кратко объясню, что здесь происходит.
Причина - для r в $ {documents [@]}
. Поскольку расширение переменной не заключено в кавычки, вы используете операцию «split + glob»: значение каждого элемента массива разбивается на слова в соответствии со значением IFS
, и каждое слово обрабатывается как шаблон подстановочного знака. Поскольку вы всегда устанавливаете IFS
только на время чтения
(см. Почему так часто используется `while IFS = read` вместо` IFS =; при чтении. .`? ), значение IFS
в этот момент является значением по умолчанию, которое включает пробелы. Кроме того, если у вас есть поле, содержащее что-то вроде foo *
, вы увидите имена файлов в текущем каталоге.Решением является для r в "$ {documents [@]}"
, что является стандартным способом итерации по массиву: двойные кавычки превращают это в прямое разыменование переменной без разделения и подстановки, и [@]
заставляет каждый элемент массива помещаться в отдельное слово.
Хотя установка IFS = $ '\ t'
для всего скрипта, похоже, решает проблему, на самом деле это решает только половину проблемы: это не предотвращает глобализацию с $ {документы [@]}
. Хотя вы можете отключить подстановку с помощью set -f
, использование двойных кавычек более понятно.
Очевидно, проблема заключалась в нескольких объявлениях IFS = $ '\ t'
. Удаление их и наличие одного объявления для IFS
, похоже, решило проблему.
(Хотя, хоть убей, я не понимаю , почему это было проблемой. Должно быть, была тонкая опечатка.)