Вопрос:

Запустите sudo -s внутри скрипта

linux bash shell

1042 просмотра

4 ответа

1618 Репутация автора

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

Вот содержимое моего скрипта:

sudo -s
echo "sudod"
tee /etc/yum.repos.d/logentries.repo <<EOF
[logentries]
name=Logentries repo
enabled=1
metadata_expire=1d
baseurl=http://rep.logentries.com/amazonlatest/\$basearch
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries
EOF
yum update
yum install logentries

Я вставил оператор echo в строку 2, чтобы проверить, подходит ли сценарий к этой точке, но когда я запускаю сценарий, он даже не выводится. Я думаю, это означает, что я не могу просто использовать sudo -sвнутри скрипта, как я могу в командной строке.

Кто-нибудь знает, как я могу сделать эти инструкции командной строки в сценарии оболочки?

Автор: MarksCode Источник Размещён: 22.08.2016 09:42

Ответы (4)


1 плюс

1460 Репутация автора

Попробуйте добавить строку 'shebang' (первая строка), чтобы позвонить вашему bash, как показано в следующем примере: (сделайте a, which bashчтобы найти ваше bashместоположение, которое может не быть /bin/bash)

#!/bin/bash

sudo -s
echo "sudod"
tee /etc/yum.repos.d/logentries.repo <<EOF
[logentries]
name=Logentries repo
enabled=1
metadata_expire=1d
baseurl=http://rep.logentries.com/amazonlatest/\$basearch
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries
EOF
yum update
yum install logentries

ПРИМЕЧАНИЕ. Вам может быть предложено ввести sudo -sпароль.

Автор: tale852150 Размещён: 22.08.2016 09:51

4 плюса

2083 Репутация автора

Я вообще проверяю EUID и если он не нулевой, то что-то вроде:

if [ $EUID -ne 0 ]; then
    exec sudo $0
done

(По сути, принудительно запускайте сценарий от имени пользователя root, если это еще не сделано. Бит «exec» гарантирует, что элемент управления не вернется к сценарию без полномочий root.)

Автор: BJ Black Размещён: 22.08.2016 09:53

2 плюса

163 Репутация автора

Удаление строки sudo и ее активация sudo ./scriptдолжны дать вам то, что вы хотите.

Или sudo можно использовать в скрипте, добавив префикс отдельных команд ( sudo tee, sudo yum).

Автор: Daniel Bungert Размещён: 22.08.2016 10:01

4 плюса

641 Репутация автора

Решение

Каждая команда в сценарии оболочки запускается независимо. Скрипт является родительским процессом, который вызывает команды как дочерние процессы. Таким образом, sudo -sсоздается новый процесс, который открывает корневую оболочку. Однако этот процесс не может выполнить команды позже.

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

Вы можете написать все команды, кроме как sudo -sв сценарии оболочки. Сделайте его исполняемым chmod +x install_logentries.sh. И выполнить это черезsudo install_logentries.sh

Другая альтернатива - встраивать команды как дочерний процесс, используя << (как указано ниже):

#!/bin/bash
sudo -s << SCRIPT
tee /etc/yum.repos.d/logentries.repo <<EOF

[logentries]
name=Logentries repo
enabled=1
metadata_expire=1d
baseurl=http://rep.logentries.com/amazonlatest/\$basearch
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries

EOF
yum update
yum install logentries
SCRIPT
Автор: acsrujan Размещён: 22.08.2016 10:02
Вопросы из категории :
32x32