Как запустить команду «sudo» внутри скрипта?

Чтобы выполнить патч вручную, я должен ввести эту команду

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 внутри скриптов. Вместо этого удалите sudo из скрипта и запустите скрипт с помощью sudo :

 sudo myscript.sh 

Таким образом, все команды внутри скрипта будут запускаться с привилегиями root, и вам нужно будет только один раз указать пароль при запуске скрипта. Если вам нужна определенная команда в скрипте, который будет запущен без привилегий sudo , вы можете запустить его как обычного пользователя (спасибо Lie Ryan ):

 sudo -u username command 

Пространство не имеет значения, оно ничего не должно затрагивать, всегда существует пробел между командой и ее аргументами.

Вы могли бы изменить файл sudoers .

Запустите sudo visudo .

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

 username ALL=(ALL) NOPASSWD: /path/to/script 

Вы можете попробовать что-то вроде:

 echo "PASSWORD" | sudo -S ./playback_delete_data_patch.sh 09_delete_old_data_p.sql 

Это не самая безопасная вещь, потому что вы пишете пароль sudoer в текстовом формате. Чтобы сделать его более безопасным, вы можете создать переменную и прочитать пароль sudo в переменной, а затем вы можете выполнить команду как:

 echo $PASSWORD | sudo -S ./playback_delete_data_patch.sh 09_delete_old_data_p.sql 

Кроме того, если вы не возражаете, чтобы все ваши команды выполнялись как root, вы можете просто выполнить свой скрипт с помощью sudo , как было предложено ранее.

 sudo ./myscript 

Этот ответ похож на ответ Тердона. Поскольку я также предложил бы запустить основной скрипт с помощью sudo чтобы вы могли запускать команды, не спрашивая у пользователя пароль.

Однако, если вы хотите запустить некоторые из команд не как пользователь root или конкретный системный пользователь, а как фактический пользователь, который $SUDO_USER команду с помощью sudo , вы можете проверить переменную $SUDO_USER чтобы определить оригинального пользователя.

Это пример сценария того, как вы могли бы достичь этого:

 #!/bin/bash # ref: https://askubuntu.com/a/30157/8698 if ! [ $(id -u) = 0 ]; then echo "The script need to be run as root." >&2 exit 1 fi if [ $SUDO_USER ]; then real_user=$SUDO_USER else real_user=$(whoami) fi # Commands that you don't want run with root would be invoked # with: sudo -u $real_user # So they will be ran as the user who invoked the sudo command # Keep in mind, if the user is using a root shell (they're logged in as root), # then $real_user is actually root # sudo -u $real_user non-root-command # Commands that need to be ran with root would be invoked without sudo # root-command 
 #!/bin/bash # this declares that current user is a sudoer sudo tee /etc/sudoers.d/$USER <<END END # write the content of your script here sudo npm install hexo-cli -g mkdir Untitled sudo apt-get install python # then to remove the sudo access from the current user sudo /bin/rm /etc/sudoers.d/$USER sudo -k 

Вы можете попытаться добавить пользователя, который запускает скрипт в файл sudoers:

 #give permissions to the file sudo chmod 700 /etc/sudoers.d/useradm sudo visudo /etc/sudoers.d/useradm #add the following text, changing "user" but your desired user user ALL=(ALL)NOPASSWD:ALL #return the right permissions to the file sudo chmod 440 /etc/sudoers.d/useradm 

Надеюсь, к настоящему моменту у вас есть свой ответ, но поскольку я пытался достичь аналогичной цели и был привезен в моем поиске, чтобы не найти ничего полезного, я хотел бы поделиться тем, что сработало для меня!

Я пытался разбудить свой ноутбук в определенные даты и время, поэтому у меня есть инструкция while, которая включает в себя следующее:

 echo | sudo VAR=$PASSWORD -S rtcwake -m no -lt \$\(week[$i]\) 

В принципе, у вас должен быть VAR= а затем ваш [$PASSWORD] , за которым следует опция -S а затем ваша [COMMAND] , чтобы запустить скрипт (ы) без запроса пароля (потому что вы уже дали Это).

попробуйте использовать команду «ожидать» на терминале.

 expect -c " spawn telnet $var expect \"*Username:*\" send \"$USERNAME\r\" expect \"*Password:*\" send \"$PASSWORD\r\" expect \"*#*\" sleep 5 send \"$CMD\r\" expect \"*#*\" send \"end\r\" expect \"*#*\" send \"exit\r\" interact " 

Это вот так. Он автоматизирует любые команды только в одной строке.

будет делать sudo или что угодно. Надеюсь, я тебе помогу. 🙂