30秒後にシステムをシャットダウンするこのスクリプトがあります。このスクリプトをダブルクリックして実行します(nautilusで変更したオプション)。これは私のスクリプトの内容です
#!/bin/bash
shutdown -h +30;
echo "succesfull"
read -p "Press any key to continue... " -n1 -s
パスワードなしでSudoスクリプトを実行可能にするために、私はこれに続いて answer を実行し、パスワード(Sudo ~/test/test.sh
)を使用せずに端末からこのスクリプトを実行できます。問題は、上記のスクリプトをダブルクリックすると、再びルート権限を要求することです:
shutdown: Need to be root
successful
Press any key to continue...
ここで問題は何ですか?
スクリプトを通常のユーザーとして起動する場合、スクリプトをルートとして再起動する条件を作成できます。
コンピューターをシャットダウンするには:
#!/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
は、スクリプトへのフルパスを保持する変数です。