2016-12-28 3 views
0

Ich habe einen bash-Skript, das ich mit sudo renne: sudo NewScriptLauf bestimmter Befehl ohne sudo innerhalb Skript mit sudo bash läuft

im Skript, ich habe einen git Befehl, ich will nicht mit laufen sudo. Derzeit, da das gesamte Skript mit sudo ausgeführt wird, läuft dieser Befehl auch mit sudo und das möchte ich unterdrücken.

Ist so etwas möglich oder muss ich das Skript ohne sudo laufen und fügen sudo für jeden Befehl im Skript anderen als der git Befehl?

+1

Wenn Sie ein Skript mit 'sudo' ausführen, wird das Skript so ausgeführt, als ob es vom Benutzer root ausgeführt würde. Die einzige Lösung, die ich mir vorstellen kann, ist, den git-Befehl mit den Berechtigungen eines bestimmten Benutzers auszuführen: 'sudo -S [Benutzername] [git command]' – Dunno

+0

Wenn letzteres der Fall ist, wenn 'sudo' ein Passwort erfordert wird nach einem Passwort für alle diese Befehle gefragt. – Inian

Antwort

1

Ein Ansatz ist die Umstellung auf normale Benutzerberechtigungen unter Verwendung von su und die dynamische Ausführung als die tatsächliche Änderung des Zugriffs.

Führen Sie die git Befehle mit den normalen $USER Berechtigungen innerhalb des Skripts.

su - "$USER" -c "git_command1; git_command2;" 

Die -c Flag für Befehle an die Shell nach man su Seite

-c, --command = Befehl Pass-Befehl an die Schale mit der -c-Option übergeben.

+0

Dito. Ich mache es immer so, funktioniert super. –

2

Beachten Sie, dass sudo Läufe Programme als verschiedenen Benutzer, die nicht unbedingt als root; root ist nur der Standard. Ihr Ziel ist also wahrscheinlich nicht, Ihren spezifischen Befehl git ohne sudo auszuführen, sondern ihn als einen anderen Benutzer als den Rest auszuführen.

Wenn Sie Sie git Befehl wollen durch eine hartcodierte Benutzer ausgeführt werden the_user, setzen nur

sudo -u the_user <your git command> 

in Ihrem Skript (dies wird Sie nicht nach Ihrem Passwort verlangt wird, wenn das Skript als root ausgeführt wird) .

Wenn Sie den Benutzer im Voraus nicht wissen, sondern wollen vielmehr der git Befehl ausgeführt werden, wer sudo newScript Verwendung

sudo -u $SUDO_USER <your git command> 

statt (Dank für diesen Hinweis auf @thatotherguy) genannt.

+1

Sie können '$ SUDO_USER' anstelle eines Wrappers verwenden. 'sudo' setzt es auf den aufrufenden Benutzer. –

+0

@ thatotherguy danke, habe ich diese Informationen zu der Antwort hinzugefügt. – Dreamer