Как выполнить скрипт sudo двойным кликом

У меня есть этот скрипт для отключения моей системы через 30 секунд. Я хочу запустить этот скрипт, дважды щелкнув по нему (этот параметр я изменил в nautilus). Это содержание моего скрипта

#!/bin/bash
shutdown -h +30;
echo "succesfull"
read -p "Press any key to continue... " -n1 -s

, чтобы сделать скрипт sudo исполняемым без пароля. Я последовал этому ответу и могу выполнить этот скрипт с терминала без использования пароля ( sudo ~/test/test.sh). Проблема в том, что когда я дважды щелкаю по вышеуказанному сценарию, он снова запрашивает права root:

shutdown: Need to be root
successful
Press any key to continue... 

В чем здесь проблема?

4
задан 13 April 2017 в 15:25

1 ответ

Можно сделать условное выражение для перезапуска сценария как корня, если это запускается как обычный пользователь.


Завершать работу компьютера:

#!/bin/bash

if [[ $USER == "eka" ]]; then       # If the script is ran as "eka" then...
    sudo $0                         # relaunch it as "root".
    exit 0                          # Once it finishes, exit gracefully.
elif [[ $USER != "root" ]]; then    # If the user is not "eka" nor "root" then...
    exit 0                          # Once it finishes, exit gracefully.
fi                                  # End if.

shutdown -h +30;
read -p "Press any key to continue... " -n1 -s

Упрощенная версия:

#!/bin/bash

[[ $USER == "eka" ]] && { sudo $0; exit 0; }
[[ $USER != "root" ]] && exit 0

shutdown -h +30;

Очень упрощенная версия (не рекомендуемый):

#!/bin/bash

sudo $0          # Relaunch script as root (even if it's already running as root)
shutdown -h +30; # Shutdown the computer in 30 seconds.

Приостановить компьютер:

#!/bin/bash

if [[ $USER == "eka" ]]; then                 # If the script is ran as "eka":
    gnome-screensaver-command -a                  # Lock computer.
else                                          # Else:
    sudo -u eka gnome-screensaver-command -a      # Once it finishes, exit gracefully.
fi                                            # End if.

Упрощенная версия:

#!/bin/bash

[[ $USER != "eka" ]] && { sudo -u eka gnome-screensaver-command -a; exit 0; }

Очень упрощенная версия:

#!/bin/bash

sudo -u eka gnome-screensaver-command -a

Примечание: $0 переменная, которая содержит полный путь к сценарию.

6
ответ дан 13 April 2017 в 15:25

Другие вопросы по тегам:

Похожие вопросы: