2016-05-27 6 views
1

ich ein Skript, das ein anderes Skript als sudo aufruft. Aus dem zweiten Skript, ich möchte einen anderen Prozess laufen können ohne sudo Berechtigungen (der Prozess in Frage brew, die mit sudo nicht schön spielt).Escaping von sudo in einem Skript

Hier ist der Code in Frage:

scriptA.sh:

#!/bin/sh 

sudo ./scriptB.sh 

scriptB.sh:

#!/bin/sh 

# This runs as sudo, but I need it to run as a regular user e.g. `username` 
brew update 

ich su -c "brew update" -s /bin/sh username versucht, aber OS X su erlaubt nicht die c Flagge.

+0

Es ist möglich, dass Sie nicht wollen, alle 'scriptB.sh' mit' sudo', nur bestimmte Befehle innerhalb des Skript auszuführen. – chepner

Antwort

4

Verwenden Sie einfach sudowieder:

sudo -u username brew update 
+0

Danke! Das hat perfekt funktioniert. –

0

Superuser können die su Befehl verwenden andere Benutzer zu werden. So

su otheruser -c "command to execute" 

OS X su funktioniert die -c Option ermöglichen. Sie müssen es nur nach dem Benutzernamen eingeben. Von der Manpage:

Wenn die optionalen Argumente in der Befehlszeile angegeben sind, werden sie an die Login-Shell der Zielanmeldung übergeben. Beachten Sie, dass alle Befehlszeilenargumente vor dem Ziel Login-Namen von su verarbeitet selbst, alles nach dem Ziel Login-Namen die Login-Shell übergeben wird.

In diesem Fall -c zum su Befehl keine Option ist, dann ist es eine Option, um den Login-Shell. Und die meisten Shells nehmen eine -c Option, um einen auszuführenden Befehl anzugeben.

+0

Danke für deine Antwort! Aber wie ich im Beitrag erwähnt habe, akzeptiert 'su' die Option' -c' unter OS X nicht. –

+0

Ich habe es getestet und es funktioniert. Sie haben vergessen, den Benutzernamen in den Befehl einzugeben, als Sie es ausprobiert haben. – Barmar