Intereting Posts
Снимок экрана окна на отдельном или удаленном экране Как добавить тему gtk2 в KDE? Xfce: обновление от Squeeze to Wheezy нарушило правила пользователя xfce xmessage в скрипте зависает Как создать псевдоним для каталогов и скопировать один файл в другой? Предотвратить запуск rsyslog при отправке сообщений удаленных хостов на локальный / var / log / syslog Настройки Mac G5 – Nvidia GeForce 5200 FX Могу ли я уведомить об отправке сообщения на другой монитор? Пакетное переименование файлов с шаблоном Дисковый раздел при двойной загрузке Ubuntu 14.04 на Windows 10 Команды, чтобы узнать о незнакомой системе hexdump: как подавить смещение столбца в шестнадцатеричном режиме Как использовать учетную запись samba для монтирования контейнера luks? Как OpenSSH определяет выбор алгоритма ключа хоста? SOLVED: Как я могу увидеть, какой процесс зависает мой Banana-pi в течение нескольких секунд каждые две минуты?

Как использовать 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 

Был проверен! … Проверьте, как изменилась команда 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 

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