Чтобы сделать патч вручную, я должен набрать эту команду
sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
Есть место перед 09:
sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql
Как я могу запустить это внутри скрипта?
Есть также несколько других команд, но эта доставляет проблемы.
sudo
пароль - скрипт не сможет работать полностью, если кто-то там не будет, чтобы ввести его.sudoers
настройки. Ничего страшного. Это просто нужно исправить.Ответы:
Это редко хорошая идея иметь
sudo
внутри скрипты. Вместо этого удалитеsudo
из скрипта и запустите сам скрипт с помощьюsudo
:Таким образом, все команды в скрипте будут выполняться с правами суперпользователя, и вам нужно будет указать пароль только один раз при запуске скрипта. Если вам нужна определенная команда в скрипте для запуска без
sudo
привилегий, вы можете запустить ее как обычный пользователь с помощью (спасибо Lie Ryan ):Пробел не имеет значения, он не должен ни на что влиять, всегда есть пробел между командой и ее аргументами.
источник
sudo
в скрипт явные вызовы, потому что перевод всего скрипта в корень может быть ужасной идеей, если существует всего несколько узких действий, требующих root. В этом контексте я специально отвечал на ваш комментарий: «Во многом потому, что это означает, что вы не можете запустить скрипт автоматически, поскольку вам нужно будет вводить пароль каждый раз, когда вас спрашивают».Вы могли бы изменить
sudoers
файл.Беги
sudo visudo
.Добавьте запись для вашего имени пользователя и сценария, который вы хотели бы запустить без запроса пароля.
источник
sudoers
файл.Вы можете попробовать что-то вроде:
Это не самая безопасная вещь, так как вы пишете пароль sudoer в виде обычного текста. Чтобы сделать его немного более безопасным, вы можете создать переменную и прочитать в нее пароль sudo, а затем выполнить команду как:
Кроме того, если вы не возражаете против того, чтобы все ваши команды выполнялись от имени пользователя root, вы можете просто выполнить свой скрипт, используя
sudo
, как предлагалось ранее.источник
read -s PASSWORD
Этот ответ похож на ответ Тердона . Я бы также предложил запустить основной скрипт с
sudo
тем, чтобы он мог работать без запроса пароля пользователя во время его выполнения.Однако в случае, если вы хотите отбросить привилегии root для некоторых команд и запустить их как фактический пользователь, который вызвал команду
sudo
, вы можете проверить$SUDO_USER
переменную, чтобы выяснить исходного пользователя.Это пример сценария того, как вы могли бы достичь этого:
источник
На самом деле существует гораздо более простой способ сделать это. Для переносимости это моя реализация, но вы можете свободно манипулировать ею в соответствии с вашими потребностями.
Введите свой пароль sudo в качестве параметра при запуске сценария, перехватите его и повторяйте его с каждой командой, которая запросит пароль sudo.
Вы можете добавить подсказку и захват после запуска скрипта следующим образом:
Но если кто-то еще отслеживает, что работает на узле; имеет доступ к созданным им журналам; или просто просматривает ваш случайный случай при запуске теста, что может поставить под угрозу безопасность.
Это также работает с запущенными командами / сценариями, для продолжения которых требуется yes:
Эхо является ответом на приглашение, так что вы можете использовать все, что вам нужно, там, если вы запускаете другие сценарии, у которых есть запросы на выполнение, в последовательном порядке. Убедитесь, что вы знаете этот порядок, иначе могут произойти плохие вещи.
источник
read
: ryanstutorials.net/bash-scripting-tutorial/bash-input.php Это должно избежать этой проблемыисточник
Вы можете попытаться добавить пользователя, который запускает скрипт, в файл sudoers:
источник