Problemstellung: Was ist die eleganteste und robusteste Methode, um zu testen, ob die Cygwin- mintty
bash
Sitzung "Als Administrator ausführen" lautet?
Warum gerade? Ich habe in der Regel mehrere mintty
Terminals geöffnet, wenn ich Windows benutze ( mintty
keine Registerkarten). Am umständlichsten ist es, wenn ich ein Terminalfenster finden muss, das ich durch Klicken mit der rechten Maustaste auf "Als Administrator ausführen" gestartet habe, wenn ich beispielsweise ping
eine einmalige Aktion ausführen möchte . Ich möchte die "Als Administrator ausführen" -Eigenschaft der Terminalsitzung visuell anzeigen (indem ich die bash
Shell-Eingabeaufforderungsvariable PS1
in meiner Startdatei ändere ~/.bashrc
).
Einige schnelle mögliche Lösungen:
- Ich kann den Wert einiger Umgebungsvariablen vergleichen. Beim schnellen Betrachten der
env
Ausgabe gibt es ziemlich viele Unterschiede. Es ist jedoch schwer zu sagen, welche Version in Bezug auf die Portabilität auf einen anderen Windows-Computer (möglicherweise mit einer anderen Windows-Version) am zuverlässigsten ist. id
,id -Gn
zeigt genauer gesagt verschiedene Gruppen, wenn sie als Administrator ausgeführt werden. In meinem Windows 7-Computer habe ichAdministrators
undroot
Gruppen zur Liste hinzugefügt. Auch hier bin ich mir nicht sicher, ob dies tragbar ist.- Ich könnte versuchen, eine Datei an einen Ort zu schreiben, der als normaler Benutzer fehlschlagen würde. Aber ich möchte keine Dateien an fremde Orte schreiben - dies könnte in einigen vorgestellten Szenarien potenziell destruktiv sein (z. B. fehlerhafte Speichermedien), und dies scheint für meinen Geschmack völlig unelegant.
- Ausführen eines Windows-Programms, das durch Rückgabestatus oder Ausgabe angibt, ob der Befehl "als Administrator" ausgeführt wird. Am besten wären einige mit analogem Zweck zu dem des UNIX-
id(1)
Befehls (aber nativ in Windows - oder Cygwin vorhanden, aber ohne zu weit geholte Übersetzung von Windows-Systemkonzepten in POSIX-emulierte Konzepte).
Bessere oder elegantere Vorschläge? Vielleicht bietet cygwin ein spezielles Kommandodienstprogramm an?
Update: 97% Duplikat von /programming/4051883/batch-script-how-to-check-for-admin-rights/ - der Unterschied ist nur hier, bash
anstelle von (IMHO seltsam und archaisch) Windows cmd.exe
. Bitte überprüfen Sie die Antworten und Kommentare dort.
mintty
, die 1. als Administrator ausgeführt wird, 2. eine andere Konfigurationsdatei mit unterschiedlicher Farbe verwendet Einstellungen und 3. verwendet ein alternatives Symbol. Wenn Sie der Öffentlichkeit beschreiben, wie dies zu erstellen ist, werde ich Sie positiv stimmen (es sei denn, Sie geben in Ihrer Antwort an, dass dies nicht innerhalb eines Skripts möglich ist :-).Foo
gewünschte Benutzergruppe.sudo
was erforderlich ist, auch wenn Sie als Root-Benutzer ausgeführt werden.Antworten:
Ich habe diese Funktion aus dem gleichen Grund geschrieben. Ich weiß nie, welche Shell Administratorrechte hat.
Es wurde aus dieser Antwort /programming//a/11995662/307968 für Windows Cmd Shell angepasst . Net Session gibt den Status 0 zurück, wenn Sie Administrator sind.
Jetzt muss ich nur noch meine Eingabeaufforderung oder vielleicht die Titelleistenfarbe ändern ....
quelle
Die endgültige Antwort auf diese Frage stammt aus der Cygwin-Mailingliste . Ein Prozess wird mit Administratorrechten ausgeführt, wenn der Benutzer, der ihn gestartet hat, Teil der Gruppe 544 (Administratoren) ist. Auch aus dem folgenden Kommentar von Cromax geht hervor, dass Gruppe 114 (lokales Konto und Mitglied der Administratorgruppe) manchmal ebenfalls vorhanden ist. Der Test für diese beiden Gruppen ist
Beispielsweise,
In der Vergangenheit mussten Sie auch nach Gruppe 0, der Stammgruppe in / etc / group, suchen. Aber / etc / group ist nicht mehr in Cygwin installiert und sollte normalerweise entfernt werden, wenn es vorhanden ist. Es wird daher nicht mehr empfohlen , auch nach Gruppe 0 zu suchen. Nur Gruppe 544.
quelle
id
-Ausgabe, nämlich 114 (lokales Konto und Mitglied der Administratorgruppe). Daher sollte der reguläre Ausdruck folgendermaßen aktualisiert werden:id -G | grep -qE '\<(114|544)\>' && echo admin || echo user
Ich benutze den Rückgabewert des Windows-Programms
at
. Ich habe auch die Funktionalität des Sonderzeichens PROMPTING neu erstellt\$
.quelle
id
Windows kein Äquivalent zum UNIX- Befehl gibt, akzeptiere ich dies als richtige Antwort. Zumindestat
scheint das Ausführen des Befehls ohne Argumente keine Nebenwirkungen zu haben. Ich werde diese Methode.bashrc
ab sofort in meiner Datei verwenden! Danke für den Hack.id -G | grep -qE '\<(544|0)\>'
schien nicht für mich zu funktionieren, da meine Ausgabe weder <> noch 544 hatte, selbst wenn sie erhöht war. Da jedoch zum Schreiben eine Elevation erforderlich ist%WINDIR%\system32
, habe ich diese verwendet, um die Elevation mit einer Shell-Funktion zu testen:Wenn man es auf Stevens exzellente Idee eines roten Hash-Charakters anwendet:
quelle
Tun Sie etwas, das nur der Administrator tun und auf Erfolg oder Misserfolg testen kann:
oder
oder
oder
quelle
In Msys unter Windows versuchen Sie dies (ich fand, dass die akzeptierte Antwort in Msys nicht funktionierte)
at &> /dev/null && echo "Running as admin" || echo "NOT running as admin"
Dies setzt voraus, dass der Rückkehrcode
at
nur dann Null ist, wenn Sie als Administrator ausgeführt werden.quelle