У меня есть этот скрипт строки от моего провайдера:
sudo bash
echo "plugin L2TP.ppp">>/etc/ppp/options
echo "l2tpnoipsec">>/etc/ppp/options
Это работает, если я вставляю построчно в Терминал. Я хочу создать файл * .command и запустить его, дважды щелкнув. Но все, что я получаю, это запрос пароля, а затем пустое окно bash. Полученный файл опций пуст.
Я попробовал это:
#!/bin/bash
echo "plugin L2TP.ppp">>/etc/ppp/options
echo "l2tpnoipsec">>/etc/ppp/options
Я получил:
/ etc / ppp / options: в доступе отказано
Я думаю, что мне нужно использовать какую-то команду, чтобы получить привилегии root изнутри bash.
Ответы:
Возьмите сценарий, который вы создали:
Сохраните его в своем домашнем каталоге или в каталоге «scripts» внутри своего домашнего каталога, как l2tp.sh. Разрешить его выполнение (запишите эту команду в Терминале):
Чтобы выполнить файл с помощью sudo (привилегии root):
Способ № 1. В терминале тип:
Способ № 2. Создайте файл run_l2tp.command с этим содержимым:
Позвольте этому быть выполненным:
Если дважды щелкнуть run_l2tp.command и ввести пароль, файл l2tp.sh будет выполнен с правами суперпользователя.
Некоторые заметки:
источник
Сохранить это:
на рабочий стол в файле с именем
script.sh
.Откройте окно терминала и введите:
При появлении запроса введите пароль, и все команды в файле будут выполняться с привилегиями суперпользователя.
источник
Если в целях безопасности вы не хотите, чтобы какой-либо пользователь вашей системы мог запускать сценарий, а наоборот, вы хотите, чтобы вас попросили ввести пароль администратора, альтернативным решением было бы сохранить сценарий оболочки и затем использовать программу. Редактор AppleScript для создания AppleScript.
AppleScript будет однострочным, говоря
do shell script «your script's name here» with administrator privileges
. Сохраните этот скрипт как приложение. Затем, когда вы щелкните по нему, он попросит вас ввести пароль администратора, а затем запустите сценарий оболочки с правами администратора.Очевидно, замените
«your script's name here»
путь к вашему сценарию.источник
Проблема, что когда вы делаете это из командной строки, что вы делаете, начиная
bash
подsudo
, а затем отправить эти следующие две командыbash
, а не оригинальной оболочки. (признак того, что вам нужноexit
дважды)Когда вы делаете это в скрипте,
bash
команда никогда не завершается, поэтому следующие две команды никогда не запускаются.Это не так элегантно, как решение AppleScript, но если вы собираетесь сделать это как скрипт из командной строки, эквивалент будет:
Если бы нам не требовалось перенаправление io (
>>
бит), мы могли бы просто вызвать команду напрямую,sudo
не прибегая кsudo sh -c
хитрости. (и обратите внимание, что мне пришлось процитировать аргумент, чтобыsh -c
он не запускал эхо от имени пользователя root, но файл добавлялся как исходный пользователь.)Он будет работать как
.command
файл из Finder, но откроет окно терминала, запрашивающее ваш пароль, и при правильном вводе запустит команды. (при условии, что вы недавно неsudo
проходили аутентификацию для ... если у вас есть, она будет проходить без запроса)источник