Frage

In meinem Bash-Skript, ich einige Befehle als ein anderer Benutzer ausführen. Ich möchte eine bash-Funktion aufzurufen su verwenden.

my_function()
{
  do_something
}

su username -c "my_function"

Das obige Skript funktioniert nicht. Natürlich ist my_function nicht innerhalb su definiert. Eine Idee, die ich habe, ist die Funktion in eine separate Datei zu setzen. Haben Sie eine bessere Idee, dass vermeidet eine andere Datei zu machen?

War es hilfreich?

Lösung

Sie können die Funktion exportieren, um sie in die Subshell verfügbar zu machen:

export -f my_function
su username -c "my_function"

Andere Tipps

Sie können aktivieren 'sudo' in Ihrem System und die Nutzung, dass statt.

Sie müssen die Funktion im gleichen Umfang haben, wo Sie es verwenden. Also entweder legen Sie die Funktion innerhalb der Anführungszeichen, oder die Funktion zu einem separaten Skript setzen, die Sie dann mit su -c ausgeführt werden.

Eine andere Möglichkeit könnte Fälle werden zu machen und einen Parameter der ausgeführten Skript übergeben. Beispiel könnte sein: machen Sie zuerst eine Datei mit dem Namen „script.sh“. Dann diesen Code einfügen in ihm:

#!/bin/sh

my_function() {
   echo "this is my function."
}

my_second_function() {
   echo "this is my second function."
}

case "$1" in
    'do_my_function')
        my_function
        ;;
    'do_my_second_function')
        my_second_function
        ;;
     *) #default execute
        my_function
esac

Nach dem Hinzufügen des obigen Code dieser Befehle ausführen es in Aktion zu sehen:

root@shell:/# chmod +x script.sh  #This will make the file executable
root@shell:/# ./script.sh         #This will run the script without any parameters, triggering the default action.        
this is my function.
root@shell:/# ./script.sh do_my_second_function   #Executing the script with parameter
this function is my second one.
root@shell:/#

Um diese Arbeit zu machen, wie Sie Sie nur ausführen müssen benötigt werden

su username -c '/path/to/script.sh do_my_second_function'

und alles sollte adaequat sein. Hoffe, das hilft:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top