Ich habe ein paar Tests gemacht. Es ist mir (noch) nicht völlig klar, wie sudo
die Fähigkeit des Caches, zu erhöhen, besteht. Wahrscheinlich hat es etwas damit zu tun, dass Pseudoterminal zugewiesen wurde oder nicht.
Wenn ich Sie wäre, würde ich implementieren, was Sie in dieser Frage lesen können: Wie führe ich einen sudo
Befehl in einem Skript aus? Besonders aus einer der Antworten :
Es ist selten eine gute Idee,
sudo
in Skripten zu arbeiten. Entfernen Sie stattdessen dassudo
aus dem Skript und führen Sie das Skript selbst mit aussudo
außer in Ihrem Fall gsudo
sprechen wir von Ihnen . Zusätzlich würde ich $SUDO_USER
ggf. (aus dieser anderen Antwort ) verwenden.
Beispiel run-something
:
#!/path/to/my/gsudo /bin/bash # The shebang ensures the below code is for sure run with gsudo bash; # gsudo runs sudo, which sets $SUDO_USER (see `man sudo'). command1 # This is run with gsudo because the entire script is. # Get back to the invoking (possibly regular) user for just one command sudo -u "$SUDO_USER" command_whatever # Again as root command2 command3 # Get back to the invoking user for many commands sudo -u "$SUDO_USER" bash << EOF foo bar baz EOF
Mein gsudo
wäre sehr einfach:
#!/bin/bash SUDO_ASKPASS='/path/to/my/gsudo_helper' sudo "$@"
Und gsudo_helper
:
#!/bin/bash zenity --password --title "Enter your password" 2> /dev/null
Anmerkungen:
- Ich benutze nicht absichtlich
sudo -A
ingsudo
Code. Auf diese Weisegsudo
wird, falls verfügbar, ein Terminal verwendet,zenity
andernfalls. - Die Syntax
sudo "$@"
erlaubtgsudo
es, Befehlszeilenoptionen (wie die erwähnten-A
) an zu übergebensudo
. Dies ist eher eine gute Idee, aber wenn Sie es nicht wollen, dann überlegen Siesudo -- "$@"
.