Wie man ein Skript veranlasst, Befehle als root auszuführen
Ich bin neu in Ubuntu und Bash-Skripten, aber ich habe geraderunUpdates.sh
und fügte dies zu meinem @ hin.profile
um es auszuführen:
if [ -f "$HOME/bin/runUpdates.sh" ]; then
. "$HOME/bin/runUpdates.sh"
fi
Das Problem ist, dass das Skript so ausgeführt werden soll, als würde es von root ausgeführt (da ich mein sudo-Passwort nicht eingeben möchte).
Ich habe ein paar Orte gefunden, die ich tun solltesudo chown root.root <my script>
undsudo chmod 4755 <my script>
und wenn ich es laufen lasse, sollte es als root laufen. Aber es ist nicht..
Das Drehbuch sieht für mich gut aus. Was vermisse ich?-rwxr-xr-x 1 root root 851 Mar 23 21:14 runUpdates.sh*
Können Sie mir bitte helfen, die Befehle in diesem Skript als root auszuführen? Ich möchte die sudors-Datei nicht wirklich ändern, sondern nur die Befehle in diesem Skript im Stammverzeichnis ausführen (falls möglich).
#!/bin/sh
echo "user is ${USER}"
#check for updates
update=`cat /var/lib/update-notifier/updates-available | head -c 2 | tail -c 1`;
if [ "$update" = "0" ]; then
echo -e "No updates found.\n";
else
read -p "Do you wish to install updates? [yN] " yn
if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then
echo -e 'No\n';
else
echo "Please wait...";
echo `sudo apt-get update`;
echo `sudo apt-get upgrade`;
echo `sudo apt-get dist-upgrade`;
echo -e "Done!\n";
fi
fi
#check for restart
restartFile=`/usr/lib/update-notifier/update-motd-reboot-required`;
if [ ! -z "$restartFile" ]; then
echo "$restartFile";
read -p "Do you wish to REBOOT? [yN] " yn
if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then
echo -e 'No\n';
else
echo `sudo shutdown -r now`;
fi
fi
Ich fügte hinzu, der Benutzer soll debuggen, er gibt immer meinen Benutzer nicht root aus und fordert zur Eingabe des sudo-Passworts auf (da ich die Befehle mit sudo aufrufe) oder sagt mir, dass Sie root sind. (wenn ich sudo entferne)
Auch gibt es eine Möglichkeit, die Update-Befehle stdout in Echtzeit auszugeben, nicht nur einen Block, wenn sie fertig sind?
(Ich habe es auch mit dem shebang als @ versuc#!/bin/bash
)