Ошибка ввода / вывода При прохождении аргумента командной строки к сценарию оболочки

На /etc/rc.local много мусора. Вы должны беспокоиться о содержании всех этих исполняемых файлов со случайными именами в / tmp , а не только о первом.

Кроме того, ни один из трех перечисленных вами пунктов не имеет смысла.Комментаторы вашего поста дали дельный совет: взорвите машину с орбиты, а затем переустановите с чистого носителя. Это лучшее, что можно сделать.

0
13.11.2018, 12:39
3 ответа

Я смог исправить это, поместив $1вне одинарной кавычки. Не уверен, что это лучший подход.

Рабочий скрипт теперь выглядит так-

sudo sh -c 'echo '$1' > /sys/class/backlight/intel_backlight/brightness'

0
28.01.2020, 02:41

Да, вы видите проблему (ваш ответ https://unix.stackexchange.com/a/481424/4778), но вы все равно должны указать$1(на всякий случай ). И не забудьте указать интерпретатор(#!…)

«Решение удалено, так как оно неправильно цитируется и содержит ошибку безопасности. см. ответ @Kusalananda.»

Мы можем объединять строки, соединяя их вместе. Двойные кавычки расширят выражение $, а одинарные — нет. В этом случае вы могли бы поместить все это в двойные кавычки, так как остальная часть текста не имеет $s, так что это не имеет значения.

-1
28.01.2020, 02:41

$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.

3
28.01.2020, 02:41

Теги

Похожие вопросы