Как использовать sudo -i в сценарии оболочки

Можно ли использовать sudo -i в сценарии оболочки? Я думаю, что команда exit столкнется с проблемами …

 #!/bin/bash sudo -i curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose exit 

2 Solutions collect form web for “Как использовать sudo -i в сценарии оболочки”

Был проверен! … Проверьте, как изменилась команда curl …

 #!/bin/bash sudo -u root curl -L "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo -u root chmod +x /usr/local/bin/docker-compose exit 

Таким образом вы не можете использовать sudo . Скрипт предоставит вам интерактивную корневую оболочку и приостановит действие, пока вы не выйдете из оболочки. Затем он будет запускать остальные команды в скрипте без привилегий root .

Если ваш скрипт выполняет только то, что требует root , тогда запустите весь скрипт с помощью sudo :

 $ sudo ./myscript.sh 

Сценарий будет выглядеть так:

 #!/bin/bash curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 

(Примечание: я на самом деле не посмотрел, что на самом деле делают эти команды)

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

 #!/bin/bash # script that does things as an ordinary user # ... sudo "$HOME/admin_tasks/do_docker_stuff.sudo" # rest of script # ... 

Или вы могли бы просто делать то, что все еще делают, и префикс каждой строки в скрипте sudo . В этом случае он потерпит неудачу, хотя, поскольку в первой строке есть перенаправление, для которой требуются привилегии root , поэтому вы «исправляете это», используя sudo bash -c " ... > ... " вместо этого, превращая симпатичный и читаемый скрипт в беспорядок путаницы (опять же, просто личное мнение).

Немного подумав: это не длинный сценарий, поэтому выполнение нескольких вызовов sudo в скрипте может быть не такой плохой идеей, но мы можем оставить вызов curl вне sudo :

 #!/bin/bash curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)" chmod a+x ./docker-compose sudo mv ./docker-compose /usr/local/bin/docker-compose sudo chown root:root /usr/local/bin/docker-compose 

Эти последние три команды могут быть помещены в do_local-bin_install.sudo (для повторного использования другими скриптами):

 #!/bin/bash binary="$1" chmod a+x "$binary" chown root:root "$binary" mv -i "$binary" /usr/local/bin/ 

которые мы могли бы назвать из нашего сценария:

 #!/bin/bash curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)" sudo ./do_local-bin_install.sudo ./docker-compose 

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

  • Как экспортировать переменную для использования с sudo?
  • Можете ли вы указать iptables как пользователя без полномочий root и почему?
  • Вызов скрипта с sudo игнорирует shebang
  • используйте net instread cdrom. linux, установка aptitude
  • RHEL Как войти в систему как другой пользователь из оболочки?
  • Как удаленно выполнить команду ssh команду sudo без пароля
  • Неправильное разрешение на папку / etc
  • Политика корневого паролей и обновление
  • форсирование sudo на удаленном сервере rsync
  • Зачем мне tty запускать sudo, если я могу sudo без пароля?
  • Что представляет собой сетевая группа хоста в контексте sudoHost в схеме LDAP Sudoers
  • Linux и Unix - лучшая ОС в мире.