Выполнить команду sudo внутри сценария bash с несколькими функциями?

xrdbиспользует препроцессор C (, потому что он, конечно же, использует ), поэтому он поддерживает условия. Вот фрагмент из моего.Xresources:

#if SCREEN_NUM == 0
Xft.dpi: 157
#endif

#if SCREEN_NUM == 1
Xft.dpi:  96
Xft.antialias: 0
#endif

Теперь xrdb -mergeбудет правильно работать на каждом мониторе, и когда вы войдете в систему, предполагая, что один из множества сценариев инициализации X потрудится посмотреть на ваш .Xresources, он также будет установлен правильно.

(Обратите внимание, :на странице Конфигурация шрифтов Arch Linux есть больше примеров, но в интересах сохранения их для потомков я включил соответствующий пример выше.)

0
28.10.2019, 15:48
3 ответа

Не используйте function, т.е. строки 2 -4 будут:

sudo_stuffs() { 
  install_ss
}

Затем, чтобы вызвать его, просто используйте:

sudo_stuffs

Наконец, чтобы получить разрешение root, когда пользователь не root, добавьте эти 3 строки в начало вашего скрипта (после строки 1 ). Это запустит скрипт через sudo, который проверит, что у пользователя есть разрешение на запуск sudoи (обычно )запросит пароль:

if [ `id -u` -gt 0 ]; then
    exec sudo "$0" "$@"
fi
0
28.01.2020, 03:10

Я нашел дубликат, но по правилам StackExchange не могу его установить.

Поэтому я публикую это здесь:

https://askubuntu.com/questions/57915/environment-variables-when-run-with-sudo

Настоящая причина отсутствия команды заключается в том, что команда sudoотбросила мои переменные среды, которые экспортировались из моей оболочки, поэтому подоболочка, сгенерированная sudo, не сможет узнать, что такое функция install_ss.

0
28.01.2020, 03:10

Ваша строка sudo bash -c "$FUNC; sudo _stuffs" мне кажется неправильной. За sudo -c должна следовать команда, которую вы хотите выполнить в кавычках, завершите свои кавычки, а затем поместите имя пользователя, для которого вы хотите выполнить команду, как в конце.

sudo -c "bash FUNC sudo_stuffs" MY_USERNAME

позвольте, я не уверен, что вы можете вызвать функцию таким образом. Я обычно вызываю свою функцию в сценарии, и если вы хотите, чтобы команды, составляющие вашу функцию, выполнялись от имени определенного пользователя, вы должны добавить suco -c "command" мое _имя пользователя к функции.

0
28.01.2020, 03:10

Теги

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