На /etc/rc.local
много мусора. Вы должны беспокоиться о содержании всех этих исполняемых файлов со случайными именами в / tmp
, а не только о первом.
Кроме того, ни один из трех перечисленных вами пунктов не имеет смысла.Комментаторы вашего поста дали дельный совет: взорвите машину с орбиты, а затем переустановите с чистого носителя. Это лучшее, что можно сделать.
Я смог исправить это, поместив $1
вне одинарной кавычки. Не уверен, что это лучший подход.
Рабочий скрипт теперь выглядит так-
sudo sh -c 'echo '$1' > /sys/class/backlight/intel_backlight/brightness'
Да, вы видите проблему (ваш ответ https://unix.stackexchange.com/a/481424/4778), но вы все равно должны указать$1
(на всякий случай ). И не забудьте указать интерпретатор(#!…
)
«Решение удалено, так как оно неправильно цитируется и содержит ошибку безопасности. см. ответ @Kusalananda.»
Мы можем объединять строки, соединяя их вместе. Двойные кавычки расширят выражение $, а одинарные — нет. В этом случае вы могли бы поместить все это в двойные кавычки, так как остальная часть текста не имеет $
s, так что это не имеет значения.
$1
в скрипте sh -c
будет расширен до первого аргумента командной строки этого скрипта , а не до первого аргумента командной строки вызывающего скрипта (, поскольку sh -c
сценарий в одинарных кавычках ).
Правильным решением будет не вводить значение $1
из вызывающего скрипта в скрипт sudo
(, что позволит использовать различные интересные уязвимости внедрения кода ), а передавать $1
из внешний скрипт во внутренний:
sudo sh -c 'printf "%s\n" "$1" > /sys/class/backlight/intel_backlight/brightness' sh "$1"
Либо используйте sudo tee
для записи в файл от имени пользователя root:
printf '%s\n' "$1" | sudo tee /sys/class/backlight/intel_backlight/brightness >/dev/null
Если данные, выводимые в файл, всегда представляют собой целое число, используйте %d
в качестве заполнителя формата printf
вместо %s
.