Как запустить функцию из скрипта от имени другого пользователя - PullRequest
0 голосов
/ 07 января 2019

В скрипте bash я пытаюсь запустить функцию, передающую в качестве параметра командную строку. И поэтому я пытаюсь передать команду find от имени другого пользователя.

Вместо выполнения команды find у меня есть функция run-command, которая в основном запускает и выводит команду и результат. Ничего сложного.

Я пытаюсь запустить эту команду:
su - ${USER} -c '$(run-command find ${DIR} -name TEST* -exec rm -rf "{}" +)'
Но это не удалось, сообщение об ошибке:

Я могу запустить команду find от имени другого пользователя следующим образом:
- su - ${USER} -c '$(find ${DIR} -name TEST* -exec rm -rf "{}" +)'
- sudo -u ${USER} find ${DIR} -name "TEST*" -exec rm -rf "{}" +

Похоже, я не могу вызвать функцию скрипта при переключении с помощью команды su на другого пользователя.

  • Я хочу продолжить мой сценарий в качестве текущего пользователя после запуска этой командной строки.
  • Я не хочу давать особые привилегии текущему пользователю, чтобы он сам запускал эту команду (нечего изменять в /etc/sudoers).

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 07 января 2019
su - ${USER} -c '$(run-command find ${DIR} -name TEST* -exec rm -rf "{}" +)'

Первая проблема, с которой вы столкнулись, заключается в том, что эта команда выполняет run-command... как уже вошедший в систему пользователь, а затем передает результат в su.... Чтобы исправить это, просто измените его на следующее:

su - ${USER} -c 'run-command find ${DIR} -name TEST* -exec rm -rf "{}" +'

Следующая проблема заключается в том, что su создает новый сеанс оболочки, поэтому мы не можем передать наши текущие переменные и функции в новый сеанс. Я предлагаю вам создать сценарий оболочки, содержащий run-command и запустить его из su -c..., в результате чего наша последняя команда будет иметь вид:

su - ${USER} -c '/path/to/run-command.sh find ${DIR} -name TEST* -exec rm -rf "{}" +'

или

su - ${USER} -c 'bash /path/to/run-command.sh find ${DIR} -name TEST* -exec rm -rf "{}" +'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...