2016-12-09 1 views
0

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?

Antwort

0

Verwenden Sie einfach eine globale Variable.

functions=("function1") 
functions+=("function2") 

function1() 
{  
    echo "$password" | sudo -S fdisk -l 
} 

function2() 
{  
    echo "$password" | sudo -S fdisk -l 
} 

password=$(zenity --password) 

for i in ${!functions[@]} 
do 
    ${functions[$i]} 
done 
+0

Diese Lösung macht mich immer noch die Passwort-Variable mit jedem Befehl verwenden. – derkomai

+0

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

+0

Ok, ich vermute, dass ich nach dem Unmöglichen gefragt habe. Vielen Dank! – derkomai

Verwandte Themen