Ich erstelle ein Bash-Skript, um einige Aufgaben in einem Array zu speichern, und einige von ihnen benötigen erhöhte Berechtigungen. Dies ist meine aktuelle Ansatz arbeitet Zenity mit:Fragen Sie nach Benutzer-Passwort durch Zenity nur einmal in Bash-Skript
#!/bin/bash
functions=("function1")
functions+=("function2")
function1()
{
password=$1
echo $password | sudo -S fdisk -l
}
function2()
{
password=$1
echo $password | sudo -S fdisk -l
}
password=$(zenity --password)
for i in ${!functions[@]}
do
${functions[$i]} $password
done
Aber ich würde jedes Mal, um das Passwort zu vermeiden, wie vorbei, etwas Ähnliches wie folgt aus:
#!/bin/bash
functions=("function1")
functions+=("function2")
function1()
{
sudo -S fdisk -l
}
function2()
{
sudo -S fdisk -l
}
password=$(zenity --password)
# Become superuser here with given password
for i in ${!functions[@]}
do
${functions[$i]}
done
Ich weiß, dass der übliche Ansatz ist ein getrennt haben Skript, aber in diesem Fall muss ich die Arbeit in nur einem Skript erledigen. Ich habe es versucht:
echo $password | sudo -S ${functions[$i]}
Aber dann Bash löst einen Fehler "sudo: function1: Auftrag nicht gefunden". Kann mir jemand sagen, was mache ich hier falsch?
Edit: Das Ziel hier ist, entweder an einem Punkt Superuser zu werden und Sudo-Privilegien zu behalten (ohne das Skript mit sudo aufzurufen) oder einfach die Passwortvariable in nur einer Codezeile zu verwenden. Ist es möglich?
Diese Lösung macht mich immer noch die Passwort-Variable mit jedem Befehl verwenden. – derkomai
Es setzt einmal 'password' und Sie können es mit den Befehlen verwenden, die es erfordern. Wenn Sie 'sudo' ausführen möchten, ohne * ein Passwort * zu verlangen, müssen Sie' sudo' in der Datei '/ etc/sudoers' konfigurieren, um festzulegen, wer welche Befehle ohne Passwort ausführen darf. Eine solche Konfiguration ist für Stack Overflow nicht möglich. – chepner
Ok, ich vermute, dass ich nach dem Unmöglichen gefragt habe. Vielen Dank! – derkomai