Написание сценария bash, использующего sudo

Я уверен, что это очень простой вопрос, но я боюсь, что не смог заставить его работать или понять, что происходит.

У меня есть проект узла, с которым я обычно запускаю

sudo npm start

и я пытаюсь создать скрипт bash, который запустит это для меня.

Я попробовал несколько вариантов:

su myname -c "npm run start"
sudo su myname -c "npm run start"
su myname -c "sudo npm start"

но все они, кажется, выполняют команду без прав суперпользователя. Из проведенного мною исследования кажется, что

sudo su myname -c "npm run start"

является правильным, но он не работает (он работает, но без разрешений). Может кто-нибудь, пожалуйста, укажите мне в правильном направлении?

1 ответ

Решение

Не используйте простой sudo в сценариях запустите весь сценарий с правами root и используйте sudo -u YOURUSERNAME выполнять команды без прав root, если это действительно необходимо.

Напишите такой скрипт:

#!/bin/bash
npm start

Сохраните его, сделайте его исполняемым с chmod +x /path/to/script и запустить его с правами root с помощью:

sudo /path/to/script    # from a terminal
gksudo /path/to/script  # without terminal (e.g. for a starter)
kdesudo /path/to/script # without terminal, KDE equivalent

Это все, что нужно.

Вы можете добавить дополнительные команды в скрипт, например, вы можете проверить, был ли он запущен от имени пользователя root, и выйти из него еще (благодаря PerlDuck):

[[ $EUID -ne 0 ]] && echo "This script must be run as root." && exit 1
Другие вопросы по тегам